这是我正在使用的代码的一部分:
subX = tf.placeholder(tf.float32, ())
op1 = tf.assign(subX,x_hat-x)
执行此代码段时,我得到:
AttributeError:“ Tensor”对象没有属性“ assign”
但是,只要执行此命令,它就可以正常工作:
subX = tf.Variable(tf.zeros((299, 299, 3)))
op1 = tf.assign(subX,x_hat-x)
我不明白为什么后者有效,但为什么不起作用。这个答案基本上说变量需要一个初始值,而占位符则不需要。在这两种情况下,我都只是覆盖它们,所以为什么重要呢? What's the difference between tf.placeholder and tf.Variable?
答案 0 :(得分:0)
不能这样使用占位符。相反,它是计算图的输入点。您可以执行以下操作:
my_var = tf.placeholder(tf.float32)
my_const = tf.constant(12.3)
with tf.Session() as sess:
result = sess.run(my_const*my_var, feed_dict={my_var: 45.7})
然后,print(result)
将给出浮点数562.11005
。
我的意思是,占位符(此处为my_var
只是一个符号节点,代表计算图形的输入,而在图形创建时尝试为这种表示分配一些值在概念上是错误的。
如果您想深入研究Tensorflow的计算模型,您可能会对this TF graph explanation感兴趣。