2017-01-31 2 views
0

그것은 내가 simpliest 일을하려고했다 How to assign value to a tensorflow variable?Tensorflow : 변수를 할당하는 방법을 제대로

의 중복 아니에요 : 그냥 변수 Tensorflow: how to swap variables between scopes and set variables in scope from another, 를 교환하고 나는 아직도 그것을 할 수 없습니다.

그러나 나는 assigntf.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 
내가 b을 변경하지 않고 a에 값을 할당 할 수있는 방법

?

답변

1

tf.identity() 연산은 상태 비 저장입니다. 이라는 tf.Variable이 있으면 tf.identity(a)의 값은 항상 a의 값과 같습니다. 당신이 a의 이전 값을 기억 b을 원하는 경우에, 당신은뿐만 아니라 tf.Variableb을 만들어야합니다

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'에 대한 파이썬 바인딩을 갱신합니다 ('tf.Variable'의 값은 아닙니다). – mrry

관련 문제