Der einfachste [A] Weg, den tatsächlichen Wert eines Tensor
Objekts zu bewerten, besteht darin, ihn an die Session.run()
Methode zu übergeben oder aufzurufen, Tensor.eval()
wenn Sie eine Standardsitzung haben (dh in einem with tf.Session():
Block oder siehe unten). Im Allgemeinen [B] können Sie den Wert eines Tensors nicht drucken, ohne in einer Sitzung Code auszuführen.
Wenn Sie mit dem Programmiermodell experimentieren und eine einfache Möglichkeit zur Bewertung von Tensoren wünschen, tf.InteractiveSession
können Sie zu Beginn Ihres Programms eine Sitzung öffnen und diese Sitzung dann für alle Tensor.eval()
(und Operation.run()
) Aufrufe verwenden. Dies kann in einer interaktiven Umgebung wie der Shell oder einem IPython-Notizbuch einfacher sein, wenn es mühsam ist, ein Session
Objekt überall herumzugeben. In einem Jupyter-Notizbuch funktioniert beispielsweise Folgendes:
with tf.Session() as sess: print(product.eval())
Dies mag für einen so kleinen Ausdruck albern erscheinen, aber eine der Schlüsselideen in Tensorflow 1.x ist die verzögerte Ausführung : Es ist sehr billig, einen großen und komplexen Ausdruck zu erstellen, und wenn Sie ihn bewerten möchten, das Back-End (to die Sie mit a Session
) verbinden, kann die Ausführung effizienter planen (z. B. unabhängige Teile parallel ausführen und GPUs verwenden).
[A]: Um den Wert eines Tensors zu drucken, ohne ihn an Ihr Python-Programm zurückzugeben, können Sie den tf.print()
Operator verwenden, wie Andrzej in einer anderen Antwort vorschlägt . Laut offizieller Dokumentation:
Um sicherzustellen, dass der Operator ausgeführt wird, müssen Benutzer die erzeugte Operation an tf.compat.v1.Session
die Ausführungsmethode übergeben oder die Operation als Steuerungsabhängigkeit für ausgeführte Operationen verwenden, indem sie mit tf.compat.v1.control_dependencies([print_op]
) angeben , das in der Standardausgabe gedruckt wird.
Beachten Sie auch Folgendes:
Druckt in Jupyter-Notizbüchern und -Folabs tf.print
auf die Notebook-Zellenausgaben. Es wird nicht in die Konsolenprotokolle des Notebook-Kernels geschrieben.
[B]: Möglicherweise können Sie die tf.get_static_value()
Funktion verwenden, um den konstanten Wert des angegebenen Tensors zu erhalten, wenn sein Wert effizient berechenbar ist.
tf.Session()
funktioniert nicht in Tensorflow 2. Sie könnentf.compat.v1.Session()
stattdessen verwenden.Während andere Antworten richtig sind, dass Sie den Wert erst drucken können, wenn Sie das Diagramm ausgewertet haben, sprechen sie nicht über eine einfache Möglichkeit, einen Wert innerhalb des Diagramms tatsächlich zu drucken, sobald Sie ihn ausgewertet haben.
Der einfachste Weg, einen Tensorwert zu sehen, wenn der Graph ausgewertet wird (mit
run
odereval
), ist die Verwendung derPrint
Operation wie in diesem Beispiel:Wenn wir nun den gesamten Graphen auswerten, z. B. mit
b.eval()
, erhalten wir:quelle
a.eval()
!tf.Print()
dies veraltet und (jetzt) entfernt wurde. Verwenden Sie stattdessentf.print()
. Siehe Dokumente: tensorflow.org/api_docs/python/tf/Print und tensorflow.org/api_docs/python/tf/print .Es ist nicht möglich, die Werte zu überprüfen, ohne das Diagramm auszuführen.
Ein einfaches Snippet für alle, die nach einem einfachen Beispiel zum Drucken von Werten suchen, ist wie folgt. Der Code kann ohne Änderungen in ipython notebook ausgeführt werden
Ausgabe:
quelle
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.
Nein, Sie können den Inhalt des Tensors nicht sehen, ohne das Diagramm auszuführen (tun
session.run()
). Die einzigen Dinge, die Sie sehen können, sind:transpose_1:0
,random_uniform:0
) generiert wirdfloat32
)Ich habe dies nicht in der Dokumentation gefunden, aber ich glaube, dass die Werte der Variablen (und einige der Konstanten zum Zeitpunkt der Zuweisung nicht berechnet werden).
Schauen Sie sich dieses Beispiel an:
Das erste Beispiel, in dem ich gerade einen konstanten Tensor von Zufallszahlen initiiere, läuft ungefähr zur gleichen Zeit, unabhängig von dim (
0:00:00.003261
)Im zweiten Fall, in dem die Konstante tatsächlich ausgewertet und die Werte zugewiesen werden, hängt die Zeit eindeutig von dim (
0:00:01.244642
) ab.Und Sie können es klarer machen, indem Sie etwas berechnen (
d = tf.matrix_determinant(m1)
unter Berücksichtigung der Tatsache, dass die Zeit abläuftO(dim^2.8)
).PS Ich fand, wo es in der Dokumentation erklärt wird :
quelle
Ich denke, Sie müssen einige Grundlagen richtig machen. Mit den obigen Beispielen haben Sie Tensoren (mehrdimensionales Array) erstellt. Damit der Tensorfluss wirklich funktioniert, müssen Sie eine " Sitzung " initiieren und Ihre " Operation " in der Sitzung ausführen . Beachten Sie das Wort "Sitzung" und "Operation". Sie müssen 4 Dinge wissen, um mit Tensorflow zu arbeiten:
Nach dem, was Sie geschrieben haben, haben Sie den Tensor und die Operation angegeben, aber Sie haben weder eine laufende Sitzung noch ein Diagramm. Tensor (Kanten des Diagramms) fließen durch Diagramme und werden durch Operationen (Knoten des Diagramms) manipuliert. Es gibt ein Standarddiagramm, aber Sie können Ihr Diagramm in einer Sitzung initiieren.
Wenn Sie "Drucken" sagen, greifen Sie nur auf die Form der von Ihnen definierten Variablen oder Konstante zu.
So können Sie sehen, was Sie vermissen:
Ich hoffe es hilft!
quelle
Im
Tensorflow 1.x
Mit Tensorflow 2.x ist der Eifersuchtsmodus standardmäßig aktiviert. Der folgende Code funktioniert also mit TF2.0.
quelle
Basierend auf den obigen Antworten können Sie das Produkt mit Ihrem speziellen Code-Snippet wie folgt drucken:
quelle
In Tensorflow 2.0+ (oder in der Eager-Modus-Umgebung) können Sie folgende
.numpy()
Methode aufrufen :quelle
tf.print(product)
gibt mir auch die gleiche Ausgabe wieprint(product.numpy())
mit TF 2.0.tf.keras.backend.eval
ist nützlich für die Auswertung kleiner Ausdrücke.TF 1.x und TF 2.0 kompatibel.
Minimal verifizierbares Beispiel
Dies ist nützlich, da Sie kein
Session
oder explizit erstellen müssenInteractiveSession
.quelle
Sie können die Ausgabe eines TensorObject überprüfen, ohne das Diagramm in einer Sitzung auszuführen, indem Sie die eifrige Ausführung aktivieren .
Fügen Sie einfach die folgenden zwei Codezeilen hinzu:
import tensorflow.contrib.eager as tfe tfe.enable_eager_execution()
gleich nach dir
import tensorflow
.Die Ausgabe
print product
in Ihrem Beispiel lautet nun:tf.Tensor([[ 12.]], shape=(1, 1), dtype=float32)
Beachten Sie, dass Sie ab sofort (November 2017) jeden Abend einen Tensorflow-Build installieren müssen, um eine eifrige Ausführung zu ermöglichen. Vorgefertigte Räder finden Sie hier .
quelle
Bitte beachten Sie, dass dadurch der
tf.Print()
Tensorname geändert wird. Wenn der Tensor, den Sie drucken möchten, ein Platzhalter ist, schlagen die Zuführungsdaten fehl, da der ursprüngliche Name beim Zuführen nicht gefunden wird. Beispielsweise:Ausgabe ist:
quelle
Sie sollten sich TensorFlow Core-Programme als zwei diskrete Abschnitte vorstellen:
Für den folgenden Code erstellen Sie einfach das Berechnungsdiagramm.
Sie müssen auch Um alle Variablen in einem TensorFlow-Programm zu initialisieren, müssen Sie eine spezielle Operation explizit wie folgt aufrufen:
Nachdem Sie das Diagramm erstellt und alle Variablen initialisiert haben, müssen Sie im nächsten Schritt die Knoten auswerten. Sie müssen das Berechnungsdiagramm innerhalb einer Sitzung ausführen. Eine Sitzung kapselt die Steuerung und den Status der TensorFlow-Laufzeit.
Der folgende Code erstellt ein Sitzungsobjekt und ruft dann seine Ausführungsmethode auf, um genügend Rechengraphen zur Auswertung auszuführen
product
:quelle
Sie können Keras verwenden. Eine einzeilige Antwort lautet
eval
: Verwenden Sie die folgende Methode:quelle
Versuchen Sie diesen einfachen Code! (es ist selbsterklärend)
quelle
Ich fand es nicht leicht zu verstehen, was erforderlich ist, selbst nachdem ich alle Antworten gelesen hatte, bis ich dies ausführte. TensofFlow ist auch für mich neu.
Möglicherweise benötigen Sie jedoch den Wert, der durch Ausführen der Sitzung zurückgegeben wird.
quelle
Grundsätzlich werden in Tensorflow beim Erstellen eines Tensors beliebiger Art diese erstellt und gespeichert, auf die nur zugegriffen werden kann, wenn Sie eine Tensorflow-Sitzung ausführen. Angenommen, Sie haben einen konstanten Tensor erstellt.
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Ohne eine Sitzung auszuführen, können Sie Folgendes erhalten :
-
op
Eine Operation. Operation, die diesen Tensor berechnet.-
value_index
: Ein int. Index des Endpunkts der Operation, der diesen Tensor erzeugt.-
dtype
: Ein DType. Art der in diesem Tensor gespeicherten Elemente.Um die Werte zu erhalten, können Sie eine Sitzung mit dem gewünschten Tensor ausführen:
Die Ausgabe wird ungefähr so aussehen:
quelle
Aktivieren Sie die eifrige Ausführung, die nach Version 1.10 in Tensorflow eingeführt wird. Es ist sehr einfach zu bedienen.
quelle
Mit den in https://www.tensorflow.org/api_docs/python/tf/print bereitgestellten Tipps verwende ich die
log_d
Funktion zum Drucken formatierter Zeichenfolgen.quelle
quelle
tf.Print ist jetzt veraltet. Hier erfahren Sie, wie Sie stattdessen tf.print (Kleinbuchstabe p) verwenden.
Das Ausführen einer Sitzung ist zwar eine gute Option, aber nicht immer der richtige Weg. Beispielsweise möchten Sie möglicherweise einen Tensor in einer bestimmten Sitzung drucken.
Die neue Druckmethode gibt einen Druckvorgang ohne Ausgabetensoren zurück:
Da es keine Ausgänge gibt, können Sie es nicht auf die gleiche Weise wie mit tf.Print in ein Diagramm einfügen. Stattdessen können Sie es hinzufügen, um Abhängigkeiten in Ihrer Sitzung zu steuern, damit es gedruckt wird.
In einem größeren Diagramm, das möglicherweise teilweise in Unterfunktionen erstellt wurde, ist es manchmal umständlich, print_op an den Sitzungsaufruf weiterzugeben. Dann kann tf.tuple verwendet werden, um den Druckvorgang mit einem anderen Vorgang zu koppeln, der dann mit diesem Vorgang ausgeführt wird, je nachdem, welche Sitzung den Code ausführt. So geht das:
quelle
Frage: Wie drucke ich den Wert eines Tensor-Objekts in TensorFlow?
Antworten:
quelle