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

运行TensorFlow Wide&Deep线性回归脚本时遇AttributeError问题求助

解决TensorFlow Wide & Deep脚本中'list'对象无'model_dir'等属性的错误

嘿,我来帮你搞定这个头疼的问题!你遇到的AttributeError: 'list' object has no attribute 'model_dir'以及后续的data_dir同类错误,本质原因很明确:脚本里的参数解析环节出了问题——原本应该是一个带属性的参数对象,结果变成了列表,自然找不到model_dir这类属性啦。

下面给你一步步的解决方案:

1. 先试试用正确的命令行参数运行脚本

wide_deep.py原本就是设计成通过命令行传递参数的,直接裸跑脚本肯定会出问题。你需要在运行时指定必要的参数,比如:

python wide_deep.py --model_dir ./my_model_save_path --data_dir ./my_data_path

如果是在IDE里运行(比如PyCharm),记得去运行配置里添加这些命令行参数,不要直接点运行按钮哦。

2. 检查脚本里的参数解析代码

打开wide_deep.py,找到参数定义的部分,正常应该是类似这样的:

tf.flags.DEFINE_string("model_dir", "", "Directory for saving models.")
tf.flags.DEFINE_string("data_dir", "", "Directory for storing data.")
# 其他参数定义...

FLAGS = tf.flags.FLAGS  # 关键是这一行,要确保FLAGS是解析后的对象,不是列表

如果你不小心把FLAGS = tf.flags.FLAGS写成了FLAGS = [tf.flags.FLAGS](加了个中括号),那FLAGS就变成列表了,自然会触发属性找不到的错误。赶紧检查修复这部分。

3. 硬编码参数的正确姿势

如果你不想用命令行参数,非要硬编码的话,不能只改一处!要把代码里所有用到FLAGS.model_dir、FLAGS.data_dir的地方都替换成实际的路径字符串。比如:

  • 把estimator = tf.estimator.LinearClassifier(model_dir=FLAGS.model_dir, ...)改成estimator = tf.estimator.LinearClassifier(model_dir="./my_model_dir", ...)
  • 把input_fn = lambda: input_fn_maker("train", FLAGS.data_dir, ...)改成input_fn = lambda: input_fn_maker("train", "./my_data_dir", ...)
    只改某一处的话,其他地方调用FLAGS的属性还是会报错,这就是你之前硬编码后还出问题的原因。

按照上面的步骤调整后,再运行脚本应该就能正常跑起来啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:05:48