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

使用TensorFlow Object Detection API训练SSD MobileNetV2时遇TypeError报错

解决TypeError: 'pred' must be a Tensor, or a Python bool, or 1 or 0. Found instead: None报错

我之前跑SSD MobileNetV2训练时也碰到过一模一样的问题,大概率是这几个环节出了状况,你可以逐一排查:

1. 先检查配置文件的数据集路径与完整性

你的ssd_mobilenet_v2_coco.config里,train_input_reader和eval_input_reader下的input_path是不是指向了正确的TFRecord文件?

  • 要确认路径没有拼写错误,不管是绝对路径还是相对当前运行目录的路径,对应的TFRecord文件必须真实存在且完整。
  • 另外回忆下生成TFRecord时有没有报错,如果生成过程中断,很可能导致文件损坏或为空,读取时就会出现异常。

2. 核对自定义数据集的配置修改

如果是用自己的数据集训练,有没有把配置里的num_classes改对?

  • 不仅要修改model模块下的num_classes,还要检查train_config里的fine_tune_checkpoint_type是否和预训练模型匹配,别漏了eval_config里的相关设置。
  • 有时候不小心注释掉了配置里的关键预测层代码,也会导致模型构建时无法生成有效预测张量,最终输出None。

3. 确认TensorFlow与API的版本兼容性

版本不匹配也容易引发这类奇怪的张量错误:

  • 如果你用的是TensorFlow 2.x,要确保Object Detection API是适配TF2的版本(现在官方models仓库已经全面支持TF2了,别用老的TF1分支)。
  • 重新检查依赖安装:比如protobuf版本是否符合要求,有没有执行protoc编译protobuf文件的步骤?

4. 加调试代码定位根源

如果上面的方法都没解决,就顺着报错堆栈找问题位置:

  • 在报错的代码段附近,打印相关变量的状态,比如看看pred是在哪个环节变成None的——是数据读取时没拿到有效张量,还是模型层输出为空?
  • 比如我当时是因为TFRecord里有几个样本的标注格式错误,导致数据读取返回空张量,进而让预测分支输出None,重新生成正确的TFRecord就解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:29:56