You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras training.py fit方法报logs变量未赋值UnboundLocalError排查咨询

Keras fit方法报UnboundLocalError: local variable 'logs' referenced before assignment排查修复方向

这个报错不是TensorFlow内置training.py的原生bug,核心原因是训练流程没有成功执行任何一个完整的训练批次,存储批次日志的logs变量从未被赋值,就直接走到了轮次结束的日志拷贝逻辑。针对PyImageSearch预配置Mask R-CNN在Colab环境加载自有数据集训练的场景,按以下优先级排查:

  • 优先排查数据集加载有效性
    首先核对数据集配置路径和Colab实际挂载路径是否一致,最常见的问题是挂载谷歌云盘后漏写/drive/MyDrive/路径前缀,或者COCO格式标注文件的类名配置、标注路径和实际文件不匹配,导致训练数据生成器读取到的有效样本数为0,自动计算的steps_per_epoch为0,训练循环根本不会进入批次执行逻辑,直接触发报错。可以在调用model.fit()前单独打印训练集加载样本数、steps_per_epoch计算值,确认两个数值都大于0。
  • 检查训练步长参数配置
    如果手动修改过steps_per_epoch参数,确认没有误设为0或者负数;如果是脚本自动按「训练集样本数/batch size」计算步长,检查batch size是否被设置为大于训练集总样本数的值,整数除法会直接得到0步长。
  • 排查自定义逻辑的静默报错
    PyImageSearch提供的Mask R-CNN脚本默认带自定义训练回调、周期mAP评估回调,还有自定义数据增强、掩码加载逻辑:如果这部分逻辑在第一个训练批次执行时抛出了被内部捕获的非致命错误,会直接中断批次流程,不生成logs就跳出批次循环。排查时可以先注释掉所有自定义回调,关闭数据增强,只取2-3张正常标注的样本做最小训练集,设置batch size=1测试能不能跑通第一个step,逐步定位自定义逻辑的问题。
  • 核对TensorFlow/Keras版本兼容性
    Colab默认预装的TensorFlow版本会不定期更新,PyImageSearch的Mask R-CNN预配置脚本大多适配TensorFlow 2.0~2.4版本,版本过高会出现自定义训练步返回值不符合新版Keras接口要求的问题,导致logs无法被正常赋值。可以先执行!pip install tensorflow==2.4.1 keras==2.4.3安装适配版本,重启Colab内核后再重试。
  • 排查GPU显存溢出的静默失败
    如果自有数据集的图像分辨率远大于脚本默认配置的输入尺寸,或者batch size设置过大,Colab分配的GPU显存不足时,偶尔会出现不抛出明确OOM提示、直接中断第一个批次训练的情况。可以先把输入图像分辨率调低、batch size设为1,同时执行!nvidia-smi查看显存占用情况,确认是不是显存问题。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:39:32