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

TensorFlow报错:'NoneType'对象不可迭代,求排查解决

解决TensorFlow中sess.run()的TypeError: 'NoneType' object is not iterable问题

我一眼就看出问题出在哪了——你在解构sess.run()的返回值时犯了个小逻辑错误!

错误根源

你写了:

_ , loss_val = sess.run(tr_op, feed_dict=feed_dict)

但tr_op是一个Operation类型(从你的输出<class 'tensorflow.python.framework.ops.Operation'>可以确认),TensorFlow中执行Operation时,sess.run()只会返回None(因为Operation本身没有可输出的张量)。而你试图把这个None拆成两个变量(_和loss_val),这就相当于尝试迭代一个None对象,自然会触发TypeError。

你的feed_dict完全没问题(是可迭代的dict类型),tr_op的类型也正确,问题根本不在这俩身上,而是返回值的解构逻辑错了。

解决方案

你想要获取loss_val,说明你肯定定义了一个loss张量(比如loss = tf.reduce_mean(...)这类代码)。你需要把训练操作tr_op和loss张量一起传入sess.run(),这样run会返回一个包含两个元素的列表:第一个是tr_op执行的结果(还是None),第二个是loss的计算值,这样解构赋值就合法了。

修改后的代码应该是这样:

# 假设你已经定义了名为loss的张量
_ , loss_val = sess.run([tr_op, loss], feed_dict=feed_dict)

额外说明

如果你不想接收tr_op的返回值,也可以分开执行,但这种方式需要两次会话调用,效率更低:

# 先执行训练操作
sess.run(tr_op, feed_dict=feed_dict)
# 再获取loss值
loss_val = sess.run(loss, feed_dict=feed_dict)

显然第一种一次性传入列表的方式更高效,也更符合TensorFlow的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:13