Tensorflow报AttributeError:'NoneType'对象无'keys'属性求助
解决TensorFlow运行retrain.py时出现'NoneType' object has no attribute 'keys'的问题
我之前在做图像分类项目时也碰到过一模一样的报错,结合你的环境(Windows10 64位+Anaconda2 Python3.5)和操作流程,大概率是下面几个原因导致的,咱们一步步来排查解决:
一、数据集路径或结构不符合要求
retrain.py对数据集的文件夹结构有严格要求:每个类别必须对应一个独立的子文件夹,所有同类别图片放在该子文件夹下,比如正确的结构应该是这样:
my_images/ ├── roses/ │ ├── rose_01.jpg │ ├── rose_02.jpg │ └── ... ├── sunflowers/ │ ├── sunflower_01.jpg │ └── ... └── daisies/ └── ...
解决措施:
- 检查你运行retrain.py时指定的
--image_dir参数路径是否正确:Windows下路径要注意用反斜杠\(或者转义后的双反斜杠\\),也可以用正斜杠/替代,比如--image_dir C:/my_images - 确认数据集文件夹里没有空的子文件夹,也不要混入非图片格式的文件(比如文档、压缩包)
- 如果路径里有空格,记得给路径加上引号,比如
--image_dir "C:/My Images"
二、TensorFlow版本与retrain.py脚本不兼容
你用的retrain.py是从旧版本TensorFlow仓库下载的,它的API调用逻辑和新版本TensorFlow(比如2.x系列)不兼容,很容易出现变量为None的情况。
解决措施:
- 降级TensorFlow到兼容版本:因为你用的是Python3.5,推荐安装TensorFlow 1.15.0(这是1.x系列的最后一个稳定版,完美兼容Python3.5),运行命令:
pip install tensorflow==1.15.0 - 修改retrain.py代码适配新版本:如果不想降级,可以找到报错的代码行(通常是获取分类标签的部分),先判断变量是否为None再调用
keys()方法,比如把:
修改为:labels = sorted(label_dict.keys())if label_dict is not None: labels = sorted(label_dict.keys()) else: raise ValueError("未找到有效分类标签,请检查数据集路径")
三、Anaconda环境依赖冲突
你安装的基础包版本比较旧(比如certifi是2016年的版本),可能和TensorFlow的依赖包产生冲突,导致部分功能无法正常加载。
解决措施:
- 先升级pip到最新版本:
python -m pip install --upgrade pip - 重新安装TensorFlow并强制更新依赖:
pip install tensorflow==1.15.0 --force-reinstall - 最稳妥的方式是创建一个全新的Anaconda环境隔离冲突:
在这个干净的环境里运行retrain.py,大概率能解决问题conda create -n tf_image_classify python=3.5 conda activate tf_image_classify pip install tensorflow==1.15.0
额外排查技巧
运行retrain.py时加上--verbose参数,能输出更详细的日志信息,帮你定位到底是加载数据集时出错,还是模型初始化时出了问题,比如:
python retrain.py --image_dir C:/my_images --verbose
内容的提问来源于stack exchange,提问作者Umang Mistry
相关产品推荐
相关产品推荐

