gpt4 book ai didi

python - 为什么这个 TensorFlow 代码片段在馈送时会抛出错误?

转载 作者:行者123 更新时间:2023-12-01 01:21:15 26 4
gpt4 key购买 nike

代码

#!/usr/bin/env python3
import tensorflow as tf
import numpy as np

def customOps(n):
x = tf.placeholder(tf.float32)
v1 = tf.reduce_sum(x,1)
v2 = tf.reduce_sum(x,0)
v = tf.nn.softmax(tf.concat([v1, v2], 0))
index = np.argmax(v)
if index > n/3:
finalval = tf.norm(v1-v2, ord='euclidean')
else:
finalval = tf.norm(v1+v2, ord='euclidean')
return finalval

if __name__ == '__main__':
mat = np.asarray([[0, 1], [1, 0]], dtype = np.float32)
n = mat.shape[0]

finalVal = customOps(n)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
outVal = sess.run(finalVal, feed_dict={x:mat})
print(outVal)
sess.close()

抛出错误

InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_5' with dtype float [[{{node Placeholder_5}} = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

错误是在上面代码片段中的 sess.run(init) 行引发的。我通过 feed_dict 提供一个浮点类型数组,但我不确定为什么会抛出错误。

错误在哪里以及为什么?

最佳答案

错误原因:

因为您在不干净的图表中多次运行相同的代码片段(即您的图表具有网络的多个副本)。我可以说这是错误消息中节点名称末尾的 _5 的原因。 TF 使用增量索引为图中的所有张量分配默认名称,以防名称已被使用。 Placeholder_5 表示在同一个图表中至少有 5 个没有分配自定义默认名称的 Placeholder 实例,根据您的代码,这是不可能的除非您多次调用该函数而不清理图表。

如何修复它:

在干净的图表中运行:将 tf.reset_default_graph() 放在 finalVal = customOps(n) 之前。

注意:您的代码存在更多问题(例如,主分支中有 x,但 x 是本地分支) customOps 的变量),但导致错误的原因是上述原因。下面您可以找到解决这两个问题的经过测试且有效的代码版本。

import tensorflow as tf
import numpy as np

def customOps(n):
x = tf.placeholder(tf.float32)
v1 = tf.reduce_sum(x,1)
v2 = tf.reduce_sum(x,0)
v = tf.nn.softmax(tf.concat([v1, v2], 0))
index = np.argmax(v)
if index > n/3:
finalval = tf.norm(v1-v2, ord='euclidean')
else:
finalval = tf.norm(v1+v2, ord='euclidean')
return x, finalval

if __name__ == '__main__':
mat = np.asarray([[0, 1], [1, 0]], dtype = np.float32)
n = mat.shape[0]

tf.reset_default_graph()
x, finalVal = customOps(n)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
outVal = sess.run(finalVal, feed_dict={x:mat})
print(outVal)
sess.close()

关于python - 为什么这个 TensorFlow 代码片段在馈送时会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53811648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com