TensorFlow에는 두 가지 방법으로 그래프의 일부를 평가할 수 있습니다 : Session.run
변수 목록 및 Tensor.eval
. 이 둘 사이에 차이점이 있습니까?
답변
Tensor
t 가있는 경우 calling t.eval()
는 calling 와 같습니다 tf.get_default_session().run(t)
.
다음과 같이 세션을 기본값으로 설정할 수 있습니다.
t = tf.constant(42.0)
sess = tf.Session()
with sess.as_default(): # or `with sess:` to close on exit
assert sess is tf.get_default_session()
assert t.eval() == sess.run(t)
가장 중요한 차이점은 sess.run()
동일한 단계에서 많은 텐서의 값을 가져 오는 데 사용할 수 있다는 것입니다 .
t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.mul(t, u)
ut = tf.mul(u, t)
with sess.as_default():
tu.eval() # runs one step
ut.eval() # runs one step
sess.run([tu, ut]) # evaluates both tensors in a single step
호출 할 때마다 참고 eval
하고 run
처음부터 전체 그래프를 실행합니다. 계산 결과를 캐시하려면에 할당하십시오 tf.Variable
.
답변
텐서 흐름에 대한 FAQ 세션에는 정확히 같은 질문에 대한 답변이 있습니다. 계속해서 여기에 두겠습니다.
경우 t
A는 Tensor
객체 t.eval()
에 대한 속기 sess.run(t)
경우 ( sess
현재 기본 세션은 코드의 다음 두 조각이 동일합니다. :
sess = tf.Session()
c = tf.constant(5.0)
print sess.run(c)
c = tf.constant(5.0)
with tf.Session():
print c.eval()
두 번째 예에서 세션은 컨텍스트 관리자 역할을하며 이는 with
블록 수명 동안 기본 세션으로 세션을 설치하는 효과가 있습니다. 컨텍스트 관리자 접근 방식은 간단한 사용 사례 (예 : 단위 테스트)를위한보다 간결한 코드로 이어질 수 있습니다. 코드에서 여러 그래프와 세션을 처리하는 경우을 명시 적으로 호출하는 것이 더 간단 할 수 있습니다 Session.run()
.
많은 것을 분명히 할 수 있으므로 FAQ 전체에서 최소한 탈지하는 것이 좋습니다.
답변
eval()
리스트 객체를 처리 할 수 없습니다
tf.reset_default_graph()
a = tf.Variable(0.2, name="a")
b = tf.Variable(0.3, name="b")
z = tf.constant(0.0, name="z0")
for i in range(100):
z = a * tf.cos(z + i) + z * tf.sin(b - i)
grad = tf.gradients(z, [a, b])
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
print("z:", z.eval())
print("grad", grad.eval())
하지만 Session.run()
할 수 있습니다
print("grad", sess.run(grad))
내가 틀렸다면 나를 바로 잡아 줘
답변
가장 기억해야 할 사항 :
TenorFlow에서 일정하고 변수 (결과)를 얻는 유일한 방법은 세션입니다.
이 모든 것을 아는 것은 쉽습니다 .
모두
tf.Session.run()
와tf.Tensor.eval()
세션의 결과를 얻을tf.Tensor.eval()
호출에 대한 바로 가기입니다tf.get_default_session().run(t)
나는 또한 방법 개요 것 tf.Operation.run()
같이 여기 :
세션에서 그래프가 시작된 후을 전달하여 작업을 실행할 수 있습니다
tf.Session.run()
.op.run()
호출 바로 가기입니다tf.get_default_session().run(op)
.
답변
tensorflow에서는 그래프를 작성하고 해당 그래프에 값을 전달합니다. Graph는 모든 노력을 기울이고 그래프에서 구성한 내용에 따라 출력을 생성합니다. 이제 그래프에 값을 전달하면 먼저 tensorflow 세션을 작성해야합니다.
tf.Session()
세션이 초기화되면 모든 변수와 설정이 이제 세션의 일부이므로 해당 세션을 사용해야합니다. 따라서 그래프에 허용되도록 외부 값을 그래프에 전달하는 두 가지 방법이 있습니다. 하나는 실행중인 세션을 사용하는 동안 .run ()을 호출하는 것입니다.
기본적으로 이것에 대한 지름길 인 다른 방법은 .eval ()을 사용하는 것입니다. .eval ()의 전체 형태는
tf.get_default_session().run(values)
직접 확인할 수 있습니다. values.eval()
실행 장소에서 tf.get_default_session().run(values)
. 동일한 동작을 가져와야합니다.
eval 이하는 일은 기본 세션을 사용한 다음 run ()을 실행하는 것입니다.
답변
Tensorflow 2.x 호환 답변 : mrry의 코드를 Tensorflow 2.x (>= 2.0)
커뮤니티의 이익 을 위해 변환 합니다.
!pip install tensorflow==2.1
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
t = tf.constant(42.0)
sess = tf.compat.v1.Session()
with sess.as_default(): # or `with sess:` to close on exit
assert sess is tf.compat.v1.get_default_session()
assert t.eval() == sess.run(t)
#The most important difference is that you can use sess.run() to fetch the values of many tensors in the same step:
t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.multiply(t, u)
ut = tf.multiply(u, t)
with sess.as_default():
tu.eval() # runs one step
ut.eval() # runs one step
sess.run([tu, ut]) # evaluates both tensors in a single step