programing

TensorFlow에서 Session.run()과 Tensor.eval()의 차이점은 무엇입니까?

luckcodes 2022. 10. 28. 22:10

TensorFlow에서 Session.run()과 Tensor.eval()의 차이점은 무엇입니까?

TensorFlow에는 그래프의 일부를 평가하는 두 가지 방법이 있습니다.Session.run변수 목록과Tensor.eval이 둘 사이에 차이가 있나요?

를 가지고 있는 경우Tensort, 콜은 콜과 동등합니다.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전체 그래프를 처음부터 실행합니다.계산 결과를 캐시하려면 계산 결과를 에 할당합니다.

텐서 흐름에 대한 FAQ 세션은 정확히 같은 질문에 대한 답변을 가지고 있다.그냥 여기에 놔둘게요.


한다면t는 입니다.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()

두 번째 예에서는 세션은 컨텍스트 매니저로서 기능합니다.이 예에서는 세션이 의 라이프 타임 동안 디폴트세션으로 설치됩니다.withcontext manager 접근방식은 단순한 사용 사례(유닛 테스트 등)를 위한 보다 간결한 코드로 이어질 수 있습니다.코드가 여러 그래프와 세션을 다루고 있는 경우, 에 대한 명시적인 호출이 보다 간단할 수 있습니다.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))

내가 틀렸다면 정정해 주세요

기억해야 할 가장 중요한 사항은 다음과 같습니다.

TenerFlow에서 상수 변수(모든 결과)를 얻는 유일한 방법은 세션입니다.

그 외의 모든 것은 간단합니다.

둘다요.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 2.x 호환 답변: 커뮤니티의 이익을 위해 mrry의 코드를 로 변환합니다.

!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

텐서플로우에서는 그래프를 만들고 해당 그래프에 값을 전달합니다.그래프는 모든 작업을 수행하고 그래프에서 수행한 구성에 따라 출력을 생성합니다.이제 그래프에 값을 전달할 때 먼저 텐서플로우 세션을 생성해야 합니다.

tf.Session()

세션이 초기화되면 모든 변수와 설정이 세션의 일부가 되므로 해당 세션을 사용해야 합니다.그래프가 외부 값을 받아들이도록 그래프에 전달하는 방법은 두 가지가 있습니다.하나는 실행 중인 세션을 사용하는 동안 .run()을 호출하는 것입니다.

기본적으로 단축키인 다른 방법은 .eval()을 사용하는 것입니다..eval()의 전체 형식이

tf.get_default_session().run(values)

직접 확인하실 수 있습니다.의 장소에서values.eval()달려.tf.get_default_session().run(values)같은 행동을 취해야 합니다.

평가에서는 기본 세션을 사용한 후 실행을 수행합니다.

언급URL : https://stackoverflow.com/questions/33610685/in-tensorflow-what-is-the-difference-between-session-run-and-tensor-eval