2017-11-28 1 views
1

tf.assign()을 사용할 때 경쟁 조건을 어떻게 처리합니까? 내 코드 인 경우 예를 들어 , 다음Tensorflow에서 tf.assign을 사용할 때의 경쟁 조건

y = tf.Variable(6,trainable=False,name='y'); 
x = tf.Variable(0,trainable=False,name='x'); 
assign_op = tf.assign(x, 2); 
divide_op = y/assign_op; 
answer = sess.run([divide_op]); 

내 대답은 하나 내가 생각할 수있는 유일한 것은이에 sess.run을 분할한다 .. 3 0inf입니다 :

_ = sess.run([assign_op]); 
answer = sess.run([divide_op]); 

나는 위에서 한 것처럼 동작 의존성을 만드는 것이 경쟁 조건이라는 문제를 해결할 것이라고 생각했지만 그렇지 않다. 아무도 이것에 대해 무엇을 해야할지 알고 있습니까?

답변

0

당신은 control_dependencies 흐름 제어 기능 보길 원하는 :

https://www.tensorflow.org/api_docs/python/tf/Graph#control_dependencies

with tf.control_dependencies([assign_op]): 
    divide_op = y/assign_op 

이것은 "ASSIGN_OP는"블록의 그래프 요소 이전에 완료되었는지 확인합니다.

+0

따라서 할당 연산에서 참조를 연결하는 경우 계속하기 전에 이전 할당이 완료되었는지 확인하기 위해 여러 개의 control_dependencies가 필요합니까? assign_op 참조를 두 위치에서 사용하면 어떻게됩니까? 두 방정식 모두 control_dependencies 안에 들어갈 수 있습니까? 나는 그것을 시도하고 다시 게시 할 것입니다. 고마워요! –

+0

만약 내가 모두 이해할 수 있다면, 그것들이 모두 독립적이라면 [assign_op, assign_op2, assign_op3]과 같이 목록 []에 추가 할 수 있어야합니다. 운영 명령에서 여전히 모호한 경우 몇 가지 control_dependencies를 변경해야 할 수도 있습니다. – mazecreator

+0

추가 참고 사항과 같이 snd.run() 분할은 각 .run() 후에 그래프가 최종적으로 재설정되므로 변수에 값을 할당하는 경우에만 작동합니다. 이 문제를 해결하기 위해, 1 년 전에 제안 된 partial_run()이있었습니다. 파이썬 API에 포함시키지 않았는지 확실하지 않았습니다. – mazecreator