您必须为占位符张量提供一个值' Placeholder_1'与dtype浮动

时间:2018-01-24 17:12:48

标签: python numpy tensorflow

Dynamic

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

所以我认为代码的工作成本为0,W为1和0的b。但是这个错误出现了。我不知道如何解决这个问题

有关array([ 3., 5., 73., 33.])的信息 我得到sess.run([cost,hypothesis,train], feed_dict={X:x_col[0],Y:y_col[0]})

5 个答案:

答案 0 :(得分:1)

DECLARE @TableName sysname = 'MyTempTable', @TableSchema sysname = 'dbo' DECLARE @SQL NVARCHAR(MAX) SELECT @SQL = STUFF((SELECT ' UNION ALL select ' + QUOTENAME(Table_Name,'''') + ' AS TableName, ' + QUOTENAME(Column_Name,'''') + ' AS ColumnName, ' + CASE WHEN DATA_TYPE IN ('XML','HierarchyID','Geometry','Geography','text','ntext') THEN 'MAX(DATALENGTH(' ELSE 'MAX(LEN(' END + QUOTENAME(Column_Name) + ')) AS MaxLength, ' + QUOTENAME(C.DATA_TYPE,'''') + ' AS DataType, ' + CAST(COALESCE(C.CHARACTER_MAXIMUM_LENGTH, C.NUMERIC_SCALE,0) AS VARCHAR(10)) + ' AS DataWidth ' + 'FROM ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(Table_Name) FROM INFORMATION_SCHEMA.COLUMNS C WHERE TABLE_NAME = @TableName AND table_schema = @TableSchema --AND DATA_TYPE NOT IN ('XML','HierarchyID','Geometry','Geography') ORDER BY COLUMN_NAME FOR XML PATH(''),Type).value('.','varchar(max)'),1,11,'') EXECUTE (@SQL) 声明中

print

您使用的是print(step, sess.run(cost), sess.run(W), sess.run(b)) ,但费用取决于sess.run(cost)X,您应提供其值,因为它们是占位符。因此,您需要在Y中提供

feed_dict

答案 1 :(得分:0)

在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

的结果

答案 2 :(得分:0)

@ 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 :(得分:0)

检查 所有 ,您之前定义的占位符已包含/输入到feed_dict中。这是因为在计算图形时,占位符是在内存中创建的,如果其中每个占位符 都已在feed_dict中分配了实值,则tensorflow会看起来 至少在我的情况下,它会产生这样的错误。

答案 4 :(得分:0)

我正在使用google colab,但遇到了同样的问题。 我通过按“运行时”选项解决了问题,然后按了“重新启动并全部运行”!

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