W TensorFlow, jaka jest różnica między sesją.run() i Tensor.eval()?

TensorFlow ma dwa sposoby oceny części grafu: Session.run na liście zmiennych oraz Tensor.eval. Czy jest jakaś różnica między tymi dwoma?

Author: Deduplicator, 2015-11-09

4 answers

Jeśli masz Tensor t, wywołując t.eval() jest równoznaczne z wywołaniem tf.get_default_session().run(t).

Możesz ustawić domyślną sesję w następujący sposób:

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)

Najważniejszą różnicą jest to, że możesz użyć sess.run(), Aby pobrać wartości wielu tensorów w tym samym kroku:

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

Zauważ, że każde wywołanie eval i run wykona cały Wykres od zera. Aby buforować wynik obliczeń, przypisz go do tf.Variable.

 189
Author: mrry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-08 11:53:21

Sesja FAQ dotycząca przepływu tensorowego ma odpowiedź na dokładnie to samo pytanie . Ja bym to po prostu zostawił tutaj:


Jeśli t jest obiektem Tensor, t.eval() jest skrótem od sess.run(t) (Gdzie sess jest bieżącą sesją domyślną. Dwa poniższe fragmenty kodu są równoważne:

sess = tf.Session()
c = tf.constant(5.0)
print sess.run(c)

c = tf.constant(5.0)
with tf.Session():
  print c.eval()

W drugim przykładzie sesja pełni funkcję menedżera kontekstu, co powoduje zainstalowanie jej jako domyślnej sesji Przez cały okres istnienia bloku with. Kontekst podejście menedżera może prowadzić do bardziej zwięzłego kodu dla prostych przypadków użycia (takich jak testy jednostkowe); jeśli twój kod dotyczy wielu wykresów i sesji, może być łatwiejsze jednoznaczne wywołanie Session.run().

Polecam ci przynajmniej przejrzeć cały FAQ, ponieważ może to wyjaśnić wiele rzeczy.

 33
Author: Salvador Dali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 23:26:18

eval() nie można obsługiwać obiektu list

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())

AleSession.run() Może

print("grad", sess.run(grad))

Popraw mnie jeśli się mylę

 2
Author: Yushin Liu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-02 16:14:38

W tensorflow tworzysz wykresy i przekazujesz do niego wartości. Graph wykonuje całą ciężką pracę i generuje dane wyjściowe w oparciu o konfigurację wykonaną na wykresie. Teraz, gdy przekazujesz wartości do wykresu, najpierw musisz utworzyć sesję tensorflow.

tf.Session()

Po zainicjowaniu sesji powinieneś użyć tej sesji, ponieważ wszystkie zmienne i ustawienia są teraz częścią sesji. Istnieją więc dwa sposoby przekazywania wartości zewnętrznych do wykresu, tak aby Graf je akceptuje. Jednym z nich jest wezwanie .run() podczas korzystania z wykonywanej sesji.

Innym sposobem, który jest w zasadzie skrótem do tego jest użycie .eval (). Powiedziałem Skrót, ponieważ pełna forma .eval () is

tf.get_default_session().run(values)
Możesz sam to sprawdzić. W miejscu values.eval() biegu tf.get_default_session().run(values). Musisz mieć to samo zachowanie.

Eval używa domyślnej sesji, a następnie uruchamia run ().

 0
Author: Sudeep K Rana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-30 11:39:07