tf.assign()
tf.assign(ref, value, validate_shape=None, use_locking=None, name=None)
ref 값이 value 값을 대입으로 받아 업데이트된 ref값을 반환. 값이 할당 된 후 ref 의 새 값을 보유하는 Tensor를 출력한다. Tensorflow는 계산 그래프 형식이기에 각 실행단계는 다른 실행단계에 영향을 주지 않는다. 예시)
|
1 2 3 4 5 6 7 8 9 10 11 |
a = tf.Variable(1) b = a * 3 a = a + 1 init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) print(sess.run(a)) print(sess.run(b)) print(sess.run(a)) |
![]()
c언어 등 다른언어로 저 코드를 표현하면 결과는 1,3,2 가되겠지만 텐서플로는 그렇지 않다. 즉 sess.run이 실행될 때마다 이전의 연산과는 상관없는 초기화된 연산을 실행하는 것이다.
매개변수 :
- ref : Variable 노드에 있어야함. 초기화되지 않았을 수도 있다.
- value : ref와 동일한 유형이어야 하며 변수에 할당 할 값이다.
- validate_shape : (boolean , 기본값:True) 참인 경우 value 와 할당된 tensor의 모양이 일치하는지 확인한다. false 인경우 ref 는 value의 모양을 취한다.
- use_locking : (boolean, 기본값:True) True이면 할당은 잠금으로 보호된다. 그렇지 않으면 동작이 정의되진 않지만 경합이 덜 발생할 수 있다.
- name : 그냥 이름
사용예시 :
|
1 2 3 4 5 6 7 8 9 10 11 |
a = tf.Variable(1, name="a") sum = tf.Variable(0, name="sum") init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) for i in range(1,11): sess.run(tf.assign(a,i)) sess.run(tf.assign(sum, tf.add(sum,a))) print("sum = ",sess.run(sum)) |
![]()