2017-10-04 1 views
0

변수를 포함하는 간단한 계산 그래프를 정의합니다. 내가 변수의 값을 변경하는 경우는 (예상대로 그래서 모든 것이 잘 작동) 계산 그래프의 출력에 예상되는 영향이 :이 코드를 호출 할 때계산 그래프를 입력하기 전에 변수에 값을 할당 할 수 있습니까?

s = tf.Session() 

x = tf.placeholder(tf.float32) 
c = tf.Variable([1.0, 1.0, 1.0], tf.float32) 

y = x + c 

c = tf.assign(c, [3.0, 3.0, 3.0]) 
s.run(c) 
print 'Y1:', s.run(y, {x : [10.0, 20.0, 30.0]}) 

c = tf.assign(c, [2.0, 2.0, 2.0]) 
s.run(c) 
print 'Y2:', s.run(y, {x : [10.0, 20.0, 30.0]}) 

내가 얻을 :

Y1: [ 13. 23. 33.] 
Y2: [ 12. 22. 32.] 

Y1Y2 뒤에 오는 값은 c의 다른 값으로 계산되기 때문에 예상대로 다릅니다.

y의 계산 방법을 정의하기 전에 변수 c에 값을 할당하면 문제가 시작됩니다. 이 경우에는 c의 새 값을 할당 할 수 없습니다.

s = tf.Session() 

x = tf.placeholder(tf.float32) 
c = tf.Variable([1.0, 1.0, 1.0], tf.float32) 

c = tf.assign(c, [4.0, 4.0, 4.0]) # this is the line that causes problems 
y = x + c 

c = tf.assign(c, [3.0, 3.0, 3.0]) 
s.run(c) 
print 'Y1:', s.run(y, {x : [10.0, 20.0, 30.0]}) 

c = tf.assign(c, [2.0, 2.0, 2.0]) 
s.run(c) 
print 'Y2:', s.run(y, {x : [10.0, 20.0, 30.0]}) 

출력으로 내가 얻을 : 당신이 볼 수 있듯이

Y1: [ 14. 24. 34.] 
Y2: [ 14. 24. 34.] 

, 나는 y 계산 때마다, 나는 c의 이전 값을 포함하는 결과를 얻을 수 있습니다. 왜 그런가요?

답변

1

TensorFlow를 사용하면 항상 computation graph을 작성하고 있음을 명심하십시오. 첫 번째 코드 스 니펫에서는 기본적으로 y = tf.placeholder(tf.float32) + tf.Variable([1.0, 1.0, 1.0], tf.float32)을 정의합니다. 두 번째 예에서는 y = tf.placeholder(tf.float32) + tf.assign(tf.Variable([1.0, 1.0, 1.0], tf.float32), [4.0, 4.0, 4.0])을 정의합니다.

따라서 아무리 C 할당 가치없는, 연산 그래프는 작업을 할당 항상 합을 계산하기 전에 그것을 [4.0, 4.0, 4.0]를 할당 포함한다.

1

나는 당신이 추가 작업을 y = x + c 직후 c = tf.assign(c, [4.0, 4.0, 4.0])를 정의하는 때문입니다 생각, 그래서 때마다 당신은 밖으로, c = tf.assign(c, [4.0, 4.0, 4.0])이 조작은 항상 excuted됩니다 y를 실행하고 다른 할당 작업도 excuted되지만 영향을주지 않지만 최종 결과.

관련 문제