使用Docker运行TensorFlow Wide&Deep模型遇AttributeError问题求助
解决AttributeError: 'Namespace' object has no attribute 'epochs_per_eval'问题
看起来你遇到的问题主要来自两个核心点:命令行参数缺失和Python版本兼容性冲突,下面一步步帮你排查解决:
1. 直接诱因:epochs_per_eval参数未定义或未传入
wide_deep.py脚本依赖epochs_per_eval这个命令行参数来控制训练过程中每隔多少轮执行一次模型评估,但你直接运行python wide_deep.py时既没有传入该参数,也可能脚本本身的参数定义存在缺失。
对应解决步骤:
- 显式传入必要参数运行脚本:
确保带上数据集路径和评估轮次参数,比如:
注意替换python wide_deep.py --train_data ./train.tfrecord --eval_data ./eval.tfrecord --epochs_per_eval 1 --epochs 10train.tfrecord和eval.tfrecord为你实际生成的数据集文件路径。 - 补充脚本的参数定义:
如果打开wide_deep.py后发现argparse部分没有定义epochs_per_eval,可以手动添加:
保存修改后再重新运行脚本。parser = argparse.ArgumentParser() # 保留脚本中原有的其他参数定义 parser.add_argument('--epochs_per_eval', type=int, default=1, help='The number of training epochs to run between evaluations.')
2. 潜在根源:Python2.7的兼容性问题
从错误日志里的/usr/local/lib/python2.7/dist-packages/h5py/__init__.py:36可以看出,你的脚本是在Python2.7环境下执行的,但TensorFlow 2.x及后续版本已经完全停止支持Python2,而且官方Wide&Deep脚本现在都是针对Python3编写的,这会引发包括h5py依赖在内的一系列兼容问题。
对应解决步骤:
- 切换到Python3运行脚本:
把命令中的python替换为python3,比如:python3 wide_deep.py --train_data ./train.tfrecord --eval_data ./eval.tfrecord --epochs_per_eval 1 --epochs 10 - 更新TensorFlow镜像:
如果你使用的是较旧的镜像,建议拉取最新版官方镜像,确保默认环境是Python3:docker pull tensorflow/tensorflow:latest
3. 额外验证:脚本与TensorFlow版本匹配
如果你的Wide&Deep脚本是旧版本,而镜像中的TensorFlow是新版本,可能会出现参数名变更、API调用不兼容的情况。建议使用对应TensorFlow版本的官方Wide&Deep脚本,确保参数和代码逻辑都能匹配当前环境。
内容的提问来源于stack exchange,提问作者Stenal P Jolly
相关产品推荐
相关产品推荐

