我有我想在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
之前已經分配定義。