考虑以下代码:
x = tf.placeholder(tf.float32, (), name='x')
z = x + tf.constant(5.0)
y = tf.mul(z, tf.constant(0.5))
with tf.Session() as sess:
print(sess.run(y, feed_dict={x: 30}))
得到的图是x->z->y。有时我对从x开始计算y很感兴趣,但有时我必须从z开始,并希望将此值注入图中。所以z需要表现得像一个局部占位符。我该怎么做?
(对于任何感兴趣的人,我为什么需要这个。我正在使用一个自动编码器网络,它观察图像x,生成中间压缩表示z,然后计算图像y的重建。我想看看当我为z注入不同的值时,网络重建了什么。)
以以下方式使用带有默认值的占位符:
x = tf.placeholder(tf.float32, (), name='x')
# z is a placeholder with default value
z = tf.placeholder_with_default(x+tf.constant(5.0), (), name='z')
y = tf.mul(z, tf.constant(0.5))
with tf.Session() as sess:
# and feed the z in
print(sess.run(y, feed_dict={z: 5}))
愚蠢的我。
我不允许评论你的帖子@iramusa,所以我会给出答案。您不需要使用占位符_with_default。您可以将值输入到您想要的任何节点:
import tensorflow as tf
x = tf.placeholder(tf.float32,(), name='x')
z = x + tf.constant(5.0)
y = z*tf.constant(0.5)
with tf.Session() as sess:
print(sess.run(y, feed_dict={x: 2})) # get 3.5
print(sess.run(y, feed_dict={z: 5})) # get 2.5
print(sess.run(y, feed_dict={y: 5})) # get 5