Najłatwiejszym [A] sposobem oceny rzeczywistej wartości Tensor
obiektu jest przekazanie go do Session.run()
metody lub wywołanie, Tensor.eval()
gdy masz sesję domyślną (tj. W with tf.Session():
bloku lub patrz poniżej). Zasadniczo [B] nie można wydrukować wartości tensora bez uruchomienia kodu w sesji.
Jeśli eksperymentujesz z modelem programowania i chcesz w łatwy sposób ocenić tensory, tf.InteractiveSession
pozwala otworzyć sesję na początku programu, a następnie użyć tej sesji dla wszystkich Tensor.eval()
(i Operation.run()
) połączeń. Może to być łatwiejsze w ustawieniach interaktywnych, takich jak powłoka lub notatnik IPython, gdy Session
wszędzie nużące jest przechodzenie wokół obiektu. Na przykład następujące czynności działają w notatniku Jupyter:
with tf.Session() as sess: print(product.eval())
To może wydawać się głupie w przypadku tak małego wyrażenia, ale jednym z kluczowych pomysłów w Tensorflow 1.x jest odroczenie wykonania : zbudowanie dużego i złożonego wyrażenia jest bardzo tanie, a jeśli chcesz to ocenić, zaplecze (aby który łączysz za pomocą a Session
) jest w stanie bardziej efektywnie zaplanować jego wykonanie (np. równoległe wykonywanie niezależnych części i używanie GPU).
[A]: Aby wydrukować wartość tensora bez zwracania go do programu w języku Python, możesz użyć tf.print()
operatora, jak sugeruje Andrzej w innej odpowiedzi . Według oficjalnej dokumentacji:
Aby upewnić się, że operator działa, użytkownicy muszą przekazać wytworzoną tf.compat.v1.Session
metodę operacji na operację lub użyć operacji jako zależności sterującej dla wykonywanych operacji przez określenie z tf.compat.v1.control_dependencies([print_op]
), która jest drukowana na standardowe wyjście.
Pamiętaj również, że:
W notesach i colabach Jupyter tf.print
drukuje na wyjściach komórek notebooka. Nie będzie zapisywać do dzienników konsoli jądra notebooka.
[B]: Użytkownik może być w stanie korzystać z tf.get_static_value()
funkcji, aby uzyskać stałą wartość danego tensora jeśli jego wartość jest efektywnie obliczalne.
tf.Session()
nie działa w Tensorflow 2. Możesz użyćtf.compat.v1.Session()
zamiast tego.Podczas gdy inne odpowiedzi są poprawne, że nie można wydrukować wartości, dopóki nie oceni się wykresu, nie mówią one o jednym łatwym sposobie drukowania wartości wewnątrz wykresu, po jej oszacowaniu.
Najłatwiejszym sposobem sprawdzenia wartości tensora za każdym razem, gdy wykres jest oceniany (za pomocą
run
lubeval
), jest użyciePrint
operacji jak w tym przykładzie:Teraz, ilekroć oceniamy cały wykres, np. Za pomocą
b.eval()
, otrzymujemy:źródło
a.eval()
!tf.Print()
został wycofany i (teraz) usunięty. Zamiast tego użyjtf.print()
. Zobacz dokumenty: tensorflow.org/api_docs/python/tf/Print i tensorflow.org/api_docs/python/tf/print .Powtarzając to, co powiedzieli inni, nie można sprawdzić wartości bez uruchomienia wykresu.
Prosty fragment dla każdego, kto szuka łatwego przykładu do wydrukowania wartości, jest przedstawiony poniżej. Kod można wykonać bez żadnych modyfikacji w notatniku ipython
Wynik:
źródło
WARNING:tensorflow:From <ipython-input-25-8583e1c5b3d6>:1: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02. Instructions for updating: Use 'tf.global_variables_initializer' instead.
Nie, nie można zobaczyć zawartości tensora bez uruchomienia wykresu (wykonanie
session.run()
). Jedyne, co możesz zobaczyć, to:transpose_1:0
,random_uniform:0
)float32
)Nie znalazłem tego w dokumentacji, ale uważam, że wartości zmiennych (i niektórych stałych nie są obliczane w momencie przypisania).
Spójrz na ten przykład:
Pierwszy przykład, w którym właśnie inicjuję stały Tensor liczb losowych, działa w przybliżeniu w tym samym czasie, niezależnie od dim (
0:00:00.003261
)W drugim przypadku, w którym obliczana jest stała, a wartości są przypisywane, czas wyraźnie zależy od dim (
0:00:01.244642
)Możesz to wyjaśnić, obliczając coś (
d = tf.matrix_determinant(m1)
pamiętając, że czas się skończyO(dim^2.8)
)PS Znalazłem, że zostało to wyjaśnione w dokumentacji :
źródło
Myślę, że musisz dobrze zrozumieć kilka podstawowych zasad. Z powyższych przykładów stworzyłeś tensory (tablica wielowymiarowa). Ale aby przepływ tensora naprawdę zadziałał, musisz zainicjować „ sesję ” i uruchomić swoją „ operację ” w sesji. Zwróć uwagę na słowa „sesja” i „operacja”. Musisz wiedzieć 4 rzeczy do pracy z tensorflow:
Teraz z tego, co napisałeś, dałeś tensor i operację, ale nie masz uruchomionej sesji ani wykresu. Tensor (krawędzie wykresu) przepływają przez wykresy i są manipulowane przez operacje (węzły wykresu). Istnieje domyślny wykres, ale możesz go zainicjować w sesji.
Kiedy mówisz print, masz dostęp tylko do kształtu zdefiniowanej zmiennej lub stałej.
Aby zobaczyć, czego brakuje:
Mam nadzieję, że to pomoże!
źródło
W
Tensorflow 1.x
W Tensorflow 2.x tryb chętny jest domyślnie włączony. więc poniższy kod działa z TF2.0.
źródło
W oparciu o powyższe odpowiedzi za pomocą fragmentu kodu możesz wydrukować produkt w następujący sposób:
źródło
W Tensorflow 2.0+ (lub w środowisku trybu Eager) możesz wywołać
.numpy()
metodę:źródło
tf.print(product)
również daje mi taką samą moc wyjściową jakprint(product.numpy())
w TF 2.0.tf.keras.backend.eval
jest przydatny do oceny małych wyrażeń.Kompatybilny z TF 1.x i TF 2.0.
Minimalny możliwy do zweryfikowania przykład
Jest to przydatne, ponieważ nie trzeba jawnie tworzyć pliku
Session
lubInteractiveSession
.źródło
Możesz sprawdzić dane wyjściowe TensorObject bez uruchamiania wykresu w sesji, umożliwiając szybkie wykonywanie .
Po prostu dodaj następujące dwa wiersze kodu:
import tensorflow.contrib.eager as tfe tfe.enable_eager_execution()
zaraz za tobą
import tensorflow
.Dane wyjściowe
print product
w twoim przykładzie będą teraz:tf.Tensor([[ 12.]], shape=(1, 1), dtype=float32)
Pamiętaj, że od teraz (listopad 2017 r.) Będziesz musiał zainstalować kompilację nocną Tensorflow, aby umożliwić szybkie wykonanie. Gotowe koła można znaleźć tutaj .
źródło
Uwaga:
tf.Print()
zmieni nazwę tensora. Jeśli tensor, który chcesz wydrukować, jest symbolem zastępczym, podawanie danych do niego zakończy się niepowodzeniem, ponieważ podczas podawania nie zostanie znaleziona oryginalna nazwa. Na przykład:Dane wyjściowe to:
źródło
Powinieneś pomyśleć o programach TensorFlow Core składających się z dwóch oddzielnych sekcji:
Tak więc dla poniższego kodu wystarczy zbudować wykres obliczeniowy.
Musisz także zainicjować wszystkie zmienne w programie TensorFlow, musisz jawnie wywołać specjalną operację w następujący sposób:
Teraz, gdy budujesz wykres i inicjujesz wszystkie zmienne, następnym krokiem jest ocena węzłów, musisz uruchomić wykres obliczeniowy w ramach sesji. Sesja zawiera kontrolę i stan środowiska wykonawczego TensorFlow.
Poniższy kod tworzy obiekt sesji, a następnie wywołuje metodę uruchamiania, aby uruchomić wystarczającą liczbę wykresów obliczeniowych do oceny
product
:źródło
Możesz użyć Keras, odpowiedź w jednym wierszu będzie polegała na użyciu
eval
metody takiej jak:źródło
Wypróbuj ten prosty kod! (to jest oczywiste)
źródło
Nie było mi łatwo zrozumieć, co jest wymagane, nawet po przeczytaniu wszystkich odpowiedzi, dopóki tego nie wykonałem. TensofFlow też jest dla mnie nowy.
Ale nadal możesz potrzebować wartości zwracanej przez wykonanie sesji.
źródło
Zasadniczo w tensorflow, gdy tworzysz tensor dowolnego rodzaju, są one tworzone i przechowywane w środku, do którego dostęp można uzyskać tylko po uruchomieniu sesji tensorflow. Załóżmy, że utworzyłeś stały tensor
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Bez uruchamiania sesji możesz uzyskać
-
op
: Operację. Operacja obliczająca ten tensor.-
value_index
: Int. Indeks punktu końcowego operacji, który wytwarza ten tensor.-
dtype
: A Rodzaj. Rodzaj elementów przechowywanych w tym tensorze.Aby uzyskać wartości, możesz uruchomić sesję z wymaganym tensorem, ponieważ:
Wynik będzie mniej więcej taki:
źródło
Włącz chętne wykonywanie, które jest wprowadzane w tensorflow po wersji 1.10. Jest bardzo łatwy w użyciu.
źródło
Korzystając ze wskazówek zawartych w https://www.tensorflow.org/api_docs/python/tf/print używam tej
log_d
funkcji do drukowania sformatowanych ciągów.źródło
źródło
tf.Print jest teraz przestarzałe, oto jak zamiast tego użyć tf.print (małe litery p).
Chociaż prowadzenie sesji jest dobrą opcją, nie zawsze jest to najlepsza droga. Na przykład możesz wydrukować jakiś tensor w konkretnej sesji.
Nowa metoda drukowania zwraca operację drukowania, która nie ma tensorów wyjściowych:
Ponieważ nie ma danych wyjściowych, nie można wstawić go do wykresu w taki sam sposób, jak w przypadku tf.Print. Zamiast tego możesz dodać go, aby kontrolować zależności w sesji, aby wydrukować.
Czasami na większym wykresie, być może utworzonym częściowo w podfunkcjach, niewygodne jest propagowanie print_op do wywołania sesji. Następnie można użyć tf.tuple do powiązania operacji drukowania z inną operacją, która następnie zostanie uruchomiona z tą operacją, w zależności od tego, która sesja wykona kod. Oto jak to się robi:
źródło
Pytanie: Jak wydrukować wartość obiektu Tensor w TensorFlow?
Odpowiedź:
źródło