python报错invalid argument_tensorflow.python.framework.errors_impl.InvalidArgumentError-Go语言中文社区...

博客围绕使用for循环训练神经网络时出现的报错展开。训练时第一次循环正常,第二次报错,经排查发现问题可能与并行加速有关,但去掉后仍报错。最终发现是使用tf.summary.merge_all()导致,第二轮训练时它管理两轮的Summary需feed数据而报错,解决方法是替换或去掉merge。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

尝试使用一个for循环训练10次神经网络取10次结果作为均值,for循环第一次能够正常运行,当i =1时,报错:

tensorflow.python.framework.errors_impl.InvalidArgumentError:

You must feed a value for placeholder tensor ‘Placeholder’ with dtype float

[[node Placeholder (defined at D:PythonPyCharm_Projectspcg_segmentationDNN_Model.py:188) = Placeholderdtype=DT_FLOAT, shape=, _device="/job:localhost/replica:0/task:0/device:CPU:0"]]

错误的原因

下面是代码:

train_set, train_set_label, val_set, val_set_label = get_trainset(path1, path2, path3, balance=0, category=3)

test_set, test_set_label = get_testset(path4, path5, path6, 3)

acc = np.zeros([10, 3])

for i in range(10):

acc[i, 0], acc[i, 1], acc[i, 2] = main(train_set, train_set_label, val_set, val_set_label, test_set, test_set_label)

print(np.mean(acc, axis=0))

找到出错的地方:

_a[0] = tf.placeholder("float")

即使shape没有指定,但是***为什么在第一次运行的时候正确运行***。

我在训练的时候使用了并行加速:

from numba.npyufunc.parallel import NUM_THREADS

....

with tf.Session(config=tf.ConfigProto(intra_op_parallelism_threads=NUM_THREADS)) as sess:

...

有可能问题出在这里。

去掉之后运行还是发生同样的错误。

逐句运行:

数据类型和shape是对应的。如果不对应,第一次运行就应该报错。

2个博客提供错误的原因:

https://blog.youkuaiyun.com/ichglauben/article/details/84897215

https://blog.youkuaiyun.com/u012436149/article/details/53894364

我的问题是第二篇博客提及的,使用tf.summary.merge_all()引起的血案。

当第一轮训练时merge_all只是管理了本轮的summary;

第二轮训练时,merge_all除了管理了本轮的模型summary和上一轮模型的Summary。

由于Summary的计算是需要feed数据的,所以会报错。

解决方法

替换掉merge_all或者在训练的时候讲merge去掉,不保存参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值