TensorFlow ma dwa sposoby oceny części wykresu: Session.run
na liście zmiennych i Tensor.eval
. Czy jest jakaś różnica między tymi dwoma?
python
tensorflow
Geoffrey Irving
źródło
źródło
tf.Tensor.eval()
itf.Session.run()
, ale połączone, sątf.Operation.run()
itf.Tensor.eval()
jak wyjaśniono tutajOdpowiedzi:
Jeśli masz
Tensor
t, dzwonieniet.eval()
jest równoważne dzwonieniutf.get_default_session().run(t)
.Możesz ustawić sesję jako domyślną w następujący sposób:
Najważniejszą różnicą jest to, że można użyć
sess.run()
do pobrania wartości wielu tensorów w tym samym kroku:Zauważ, że każde wywołanie do
eval
irun
wykona cały wykres od zera. Aby buforować wynik obliczenia, przypisz go dotf.Variable
.źródło
a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b)
i ja właśnie skarg od tensorflow że kształty nie pasują do siebie, myślę, bardziej precyzyjnie, że ranga musi wynosić co najmniej 2tf.multiply(t, u)
i działało dobrze.Sesja FAQ na temat przepływu tensora zawiera odpowiedź na dokładnie to samo pytanie . Po prostu pójdę naprzód i zostawię to tutaj:
If
t
jestTensor
obiektem,t.eval()
jest skrótem dlasess.run(t)
(gdziesess
jest bieżąca domyślna sesja. Dwa następujące fragmenty kodu są równoważne:W drugim przykładzie sesja działa jak menedżer kontekstu, co powoduje, że jest instalowana jako sesja domyślna na cały okres istnienia
with
bloku. Podejście do menedżera kontekstu może prowadzić do bardziej zwięzłego kodu dla prostych przypadków użycia (takich jak testy jednostkowe); jeśli twój kod obsługuje wiele wykresów i sesji, łatwiejsze może być jawne wywołanieSession.run()
.Polecam przynajmniej przejrzeć całą sekcję FAQ, ponieważ może to wyjaśnić wiele rzeczy.
źródło
eval()
nie może obsłużyć obiektu listyale
Session.run()
możePopraw mnie, jeśli się mylę
źródło
Najważniejszą rzeczą do zapamiętania:
Wiedząc o tym, wszystko inne jest łatwe :
Chciałbym również nakreślić metodę
tf.Operation.run()
jak tutaj :źródło
W tensorflow tworzysz wykresy i przekazujesz wartości do tego wykresu. Graph wykonuje całą ciężką pracę i generuje dane wyjściowe na podstawie konfiguracji dokonanej na wykresie. Teraz Kiedy przekazujesz wartości do wykresu, najpierw musisz utworzyć sesję tensorflow.
Po zainicjowaniu sesji powinieneś z niej skorzystać, ponieważ wszystkie zmienne i ustawienia są teraz częścią sesji. Istnieją więc dwa sposoby przekazania wartości zewnętrznych do wykresu, aby wykres je zaakceptował. Jednym z nich jest wywołanie .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 () to
Możesz to sprawdzić samodzielnie. W miejscu
values.eval()
biegutf.get_default_session().run(values)
. Musisz uzyskać takie samo zachowanie.eval robi użycie domyślnej sesji, a następnie uruchomienie run ().
źródło
Odpowiedź zgodna z Tensorflow 2.x : Konwersja kodu Mrry
Tensorflow 2.x (>= 2.0)
na rzecz społeczności.źródło