2017-01-31 5 views
0

それは私が最も単純なことをやろうとしたHow to assign value to a tensorflow variable?Tensorflow:変数を割り当てる方法を適切に

の複製ではないです。ただ、変数Tensorflow: how to swap variables between scopes and set variables in scope from another、 を交換し、私はまだそれを行うことはできません。

しかし、assignは、tf.identityで取得するテンソルのコピーを変更することを知っています。私はこれを望んでいない。私は交換のための変数のコピーが必要です。私はbを変更せずにaに値を割り当てることができますどのように

In [10]: a = tf.Variable(1) 

In [11]: b = tf.identity(a) 

In [12]: a += 1 

In [14]: sess.run(a) 
Out[14]: 2 

In [15]: sess.run(b) 
Out[15]: 1 

In [16]: a = tf.Variable(1) 

In [17]: b = tf.identity(a) 

In [18]: assign_t = a.assign(2) 

In [20]: sess.run(tf.initialize_all_variables()) 

In [21]: sess.run(a) 
Out[21]: 1 

In [22]: sess.run(assign_t) 
Out[22]: 2 

In [23]: sess.run(a) 
Out[23]: 2 

In [24]: sess.run(b) 
Out[24]: 2 

答えて

1

tf.identity()操作はステートレスです。 というtf.Variableがある場合、tf.identity(a)の値は常にaの値と同じになります。あなたはbaの前の値を覚えておきたい場合は、あなたにもtf.Variableとしてbを作成する必要があります。

a = tf.Variable(1) 
b = tf.Variable(a.initialized_value()) 

sess.run(tf.global_variables_initializer()) 

# Initially, variables `a` and `b` have the same value. 
print(sess.run([a, b])) ==> [1, 1] 

# Update the value of `a` to 2. 
assign_op = a.assign(2) 
sess.run(assign_op) 

# Now, `a` and `b` have different values. 
print(sess.run([a, b])) ==> [2, 1] 
+0

感謝を!しかし、 'a + = 1'が' identity(a) 'と等しくない場合の最初の場合はどうでしょうか? – ckorzhik

+0

ああ、私は見る: 'a + = 1'は別のテンソルを別の名前で作る。 – ckorzhik

+0

そうです。 'a + = 1'は' new_a = a + 1と等価です。 a = new_a'は 'a'のPythonバインディングを更新します(' tf.Variable'の値ではありません)。 – mrry

関連する問題