我有我想在TensorFlow重现以下简单Theano代码:在TensorFlow中如何将一个值单独分配给变量和计算图?
import theano as th
import theano.tensor as T
import numpy as np
x = T.vector()
c = th.shared(np.array([1.0, 2.0]))
y1 = x + c
c.set_value(np.array([10.0, 20.0]))
y2 = x + c
c.set_value(np.array([100.0, 200.0]))
print 'Y1:', th.function([x],y1)([0.0, 0.0])
print 'Y2:', th.function([x],y2)([0.0, 0.0])
在上面的代码我定义依赖于x
和以相同的方式c
2个符号变量(y1
和y2
)(x + c
)。每个时间点的共享变量c
都有一个值。每当我评估y1
和y2
我总是得到相同的值,对应于当前值c
。
现在,这是我如何努力重现它在TensorFlow:
import tensorflow as tf
s = tf.Session()
x = tf.placeholder(tf.float32)
c = tf.Variable([1.0, 2.0])
y1 = x + c
c = tf.assign(c, [10.0, 20.0])
s.run(c)
y2 = x + c
c = tf.assign(c, [100.0, 200.0])
s.run(c)
print 'Y1:', s.run(y1, feed_dict = {x : [0.0, 0.0]})
print 'Y2:', s.run(y2, feed_dict = {x : [0.0, 0.0]})
从第一个观点的代码的结构是一样的(只是不同的语法)。但是,行为是不同的。由于这段代码的输出我得到:
Y1: [ 100. 200.]
Y2: [ 10. 20.]
究其原因,y1
和y2
不同的价值观我很清楚:第一分配到c
(c = tf.assign(c, [10.0, 20.0])
)是y2
,因此这个定义之前完成分配成为y2
的计算图的一部分。
所以,现在我的问题是TensorFlow中是否有可能将值设置为Variable
而不将分配作为稍后定义的所有符号变量的计算图的一部分。
换句话说,我想建立的计算曲线图(在上述情况下,一个用于y2
),将带可变c
的当前值,而忽略所有已作出c
y2
之前已经分配定义。