【问题标题】:You must feed a value for placeholder tensor 'Placeholder_1' with dtype float您必须使用 dtype float 为占位符张量“Placeholder_1”提供一个值
【发布时间】:2018-01-24 17:12:47
【问题描述】:
import tensorflow as tf

# H(x) = Wx + b

W = tf.Variable(tf.random_normal([1],name='weight'))
b = tf.Variable(tf.random_normal([1],name='bias'))

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

hypothesis = X * W + b

cost = tf.reduce_mean(tf.square(hypothesis - Y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)

sess = tf.Session()
sess.run(tf.global_variables_initializer())

Weights = []

for step in range(100):
    sess.run([cost,hypothesis,train], feed_dict={X:x_col[0],Y:y_col[0]})
    if step % 99 ==0:
        print(step, sess.run(cost), sess.run(W), sess.run(b))

这是我的代码。当我在 Python Shell 中输入x_col[0] 时,我得到array([ 3., 5., 73., 33.], dtype=float32),而对于y_col[0],我得到array([ 3., 5., 73., 33.])

所以我相信代码应该可以为 b 提供 0 和 W 的 1 和 0 成本。但是出现了这个错误。不知道怎么解决这个问题

供您参考,供sess.run([cost,hypothesis,train], feed_dict={X:x_col[0],Y:y_col[0]}) 我得到[960446.13, array([ 76.92639923, 127.70278168, 1854.09997559, 838.57220459], dtype=float32), None]

【问题讨论】:

标签: python numpy tensorflow


【解决方案1】:

在您的print 声明中

print(step, sess.run(cost), sess.run(W), sess.run(b))

您正在使用sess.run(cost),但成本取决于XY,您应该提供它们的值,因为它们是占位符。所以,你需要在feed_dict 中提供它

print(step, sess.run(cost, feed_dict={X: some_x_value, Y: some_y_value}), sess.run(W), sess.run(b))

【讨论】:

  • 对不起,我不太明白。你能详细说明一下吗?
  • 希望现在很清楚。尽管您应该遵循@Maxim 的建议,但这样会更有效率
【解决方案2】:

@layog 的回答是对的。只是想向您展示您应该使用的代码:

for step in range(100):
  cost_val, W_val, b_val, _ = sess.run([cost, W, b, train], 
                                       feed_dict={X:x_col[0],Y:y_col[0]})
  if step % 99 ==0:
    print(step, cost_val, W_val, b_val)

一次性运行训练操作和计算张量值更有效(请注意,您不必指定hypothesis)。如果你想显式计算任何张量,你也必须传递占位符:

sess.run(cost, feed_dict={X:x_col[0],Y:y_col[0]})

【讨论】:

    【解决方案3】:

    在 TensorFlow 中,您可以定义一个使用 sess.run() 语句执行的计算图。作为该图的一部分,cost 操作由占位符XY 定义。要计算 cost,您必须为 XY 提供一个值。

    在您的print 语句中,您调用sess.run(cost) 而不提供XY。这就是错误的原因。

    但是您已经执行了图表。只需存储结果值:

    C, H, _ = sess.run([cost,hypothesis,train], feed_dict={X:x_col[0],Y:y_col[0]})
    

    并打印成本C 和假设H 的结果

    【讨论】:

      【解决方案4】:

      检查所有您之前定义的占位符已包含/输入到 feed_dict 中。这是因为在计算图表的过程中,占位符是在内存中创建的,tensorflow 会看起来如果它们中的每一个在 feed_dict 中都被分配了真实值,如果没有,那么它会引发这样的错误 - 至少对我来说是这样。

      【讨论】:

        【解决方案5】:

        我正在使用 google colab,我遇到了同样的问题。 我通过按下“运行时”选项解决了这个问题,并且按下了“重新启动并运行所有”!

        这重新启动了google colab中的所有代码,并且不再显示错误!

        【讨论】:

          猜你喜欢
          • 2017-05-27
          • 1970-01-01
          • 2017-11-02
          • 2017-06-10
          • 2018-12-29
          • 2019-01-23
          • 2018-12-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多