为什么我无法分配给该占位符?

时间:2019-07-10 18:18:23

标签: python tensorflow

这是我正在使用的代码的一部分:

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?

1 个答案:

答案 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感兴趣。