如何将值注入TensorFlow图的中间?

时间:2017-01-12 19:10:14

标签: python tensorflow autoencoder

请考虑以下代码:

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 - >年。有时候我很感兴趣从x开始计算y,但有时候我有z开始并希望将这个值注入图中。所以z需要像部分占位符一样运行。我怎么能这样做?

(对于任何有兴趣为什么我需要这个。我正在使用一个自动编码器网络,它观察图像x,生成一个中间压缩表示z,然后计算图像y的重建。我想看看网络重建时的内容我为z注入了不同的值。)

2 个答案:

答案 0 :(得分:5)

以下列方式使用默认占位符:

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}))

傻傻的我。

答案 1 :(得分:3)

我不允许评论你的帖子@iramusa,所以我会给出答案。您不需要使用placeholder_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