You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

TensorFlow训练后GeneratorDataset迭代器终止报错求助

解决TensorFlow训练后GeneratorDataset iterator取消警告的问题

嘿,先给你吃颗定心丸:你的水果分类模型已经成功完成训练啦!从运行日志能看到训练全量步数跑完,训练精度0.86、验证精度接近100%,而且进程最后是正常退出的(Process finished with exit code 0)。那个让你困惑的警告只是TensorFlow内部资源清理时的小插曲,完全没影响模型训练的结果。

警告原因分析

这个Error occurred when finalizing GeneratorDataset iterator: Cancelled: Operation was cancelled警告,本质是TensorFlow训练结束后的线程同步小问题:

  • 你设置了workers=10启用多线程加载数据,当训练完成后主线程会提前终止部分仍在运行的子线程,导致迭代器的关闭操作被取消,从而抛出这个警告。
  • 这是你使用的旧版TensorFlow(2020年的版本)的已知小bug,不影响模型的训练、保存和后续使用。

消除警告的解决方法

你可以尝试下面几种方案让这个警告消失:

1. 调整多线程数量

减少fit()中的workers参数值,避免过多线程引发资源竞争:

fruit_model = model.fit(train_gen, epochs=1, verbose=1, validation_data=val_gen, workers=4)
# 也可以尝试workers=1的单线程模式,彻底避免线程同步问题

2. 训练后手动关闭生成器

在训练完成后,显式调用生成器的close()方法,帮助TensorFlow正确释放资源:

fruit_model = model.fit(train_gen, epochs=1, verbose=1, validation_data=val_gen, workers=10)
# 训练结束后手动关闭数据生成器
train_gen.close()
val_gen.close()

3. 升级TensorFlow版本

这个迭代器关闭的问题在TensorFlow 2.5及以后的版本中已经被官方修复。如果你的环境允许,可以升级到较新的稳定版本:

pip install --upgrade tensorflow

代码小瑕疵提醒

另外我注意到一个小细节:你创建验证集生成器时,不小心用了training_datagen而不是定义好的validation_datagen

# 当前代码
val_gen = training_datagen.flow_from_directory(val_dir, target_size=(150, 150), class_mode="categorical")
# 建议修正为
val_gen = validation_datagen.flow_from_directory(val_dir, target_size=(150, 150), class_mode="categorical")

不过因为两个生成器都只做归一化处理,这个小问题不会影响模型功能,只是代码逻辑上更严谨的话建议修正。

内容的提问来源于stack exchange,提问作者Rick Astley

火山引擎 最新活动