2017-01-31 57 views
0

這不是重複的How to assign value to a tensorflow variable?Tensorflow:如何分配變量正確

我試圖做simpliest件事:只是交換變量Tensorflow: how to swap variables between scopes and set variables in scope from another, 我還是不能做到這一點。

但是現在我知道assign更改張量的副本,我用tf.identity得到張量。我不想要這個。我需要交換變量的副本。

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 

我怎麼能值分配給a不改變b

回答

1

tf.identity()操作是無狀態的。當你有一個叫做atf.Variable時,tf.identity(a)的值將始終與a的值相同。如果你想b記住的a以前的值,你應該創建btf.Variable還有:

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'不等於'身份(a)'? – ckorzhik

+0

哦,我看到:'a + = 1'使另一張張具有不同的名稱。 – ckorzhik

+0

是的。 'a + = 1'相當於'new_a = a + 1; a = new_a',它只更新'a'的Python綁定(而不是'tf.Variable'中的值)。 – mrry