TensorFlow에서 Session.run()과 Tensor.eval()의 차이점은 무엇입니까?
TensorFlow에는 그래프의 일부를 평가하는 두 가지 방법이 있습니다.Session.run
변수 목록과Tensor.eval
이 둘 사이에 차이가 있나요?
를 가지고 있는 경우Tensor
t, 콜은 콜과 동등합니다.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()
두 번째 예에서는 세션은 컨텍스트 매니저로서 기능합니다.이 예에서는 세션이 의 라이프 타임 동안 디폴트세션으로 설치됩니다.with
context 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
'programing' 카테고리의 다른 글
Python 플롯에 그리드를 그리려면 어떻게 해야 하나요? (0) | 2022.10.28 |
---|---|
MySQL: Curdate() vs Now() (0) | 2022.10.28 |
JPA를 사용한 인덱스(비고유 키) 지정 (0) | 2022.10.28 |
문자열의 일부만 제거하지만 문자열 끝에 있는 경우에만 제거 (0) | 2022.10.28 |
MariaDB와 MySQL을 PHP 스크립트에서 어떻게 구별합니까? (0) | 2022.10.28 |