I私は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
に設定できるかどうかです。言い換えれば
は、私は、変数c
の現在の値を取るとされているy2
前c
に対して行われたすべての割り当てを無視します(上記の場合y2
のための1)の計算、グラフを構築したいです定義された。