TensorFlow bietet zwei Möglichkeiten, um einen Teil des Diagramms auszuwerten: Session.run
eine Liste von Variablen und Tensor.eval
. Gibt es einen Unterschied zwischen diesen beiden?
python
tensorflow
Geoffrey Irving
quelle
quelle
tf.Tensor.eval()
undtf.Session.run()
, aber verbunden isttf.Operation.run()
undtf.Tensor.eval()
wie in erklärte hierAntworten:
Wenn Sie ein
Tensor
t haben,t.eval()
entspricht das Anrufen dem Anrufentf.get_default_session().run(t)
.Sie können eine Sitzung wie folgt zum Standard machen:
Der wichtigste Unterschied besteht darin, dass Sie
sess.run()
die Werte vieler Tensoren im selben Schritt abrufen können:Beachten Sie, dass jeder Aufruf
eval
undrun
die gesamte grafische Darstellung von Grund auf neu ausgeführt wird. Um das Ergebnis einer Berechnung zwischenzuspeichern, weisen Sie es a zutf.Variable
.quelle
a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b)
und ich habe gerade Beschwerden von Tensorflow bekommen, dass die Formen nicht übereinstimmen, genauer gesagt, dass der Rang mindestens 2 sein muss.tf.multiply(t, u)
und es hat gut funktioniert.Die FAQ-Sitzung zum Tensorfluss hat eine Antwort auf genau dieselbe Frage . Ich werde einfach weitermachen und es hier lassen:
Wenn
t
es sich um einTensor
Objekt handelt,t.eval()
ist es eine Abkürzung fürsess.run(t)
(wobeisess
sich die aktuelle Standardsitzung befindet. Die beiden folgenden Codeausschnitte sind äquivalent:Im zweiten Beispiel fungiert die Sitzung als Kontextmanager, wodurch sie als Standardsitzung für die Lebensdauer des
with
Blocks installiert wird . Der Kontextmanager-Ansatz kann zu einem präziseren Code für einfache Anwendungsfälle (wie Unit-Tests) führen. Wenn Ihr Code mehrere Diagramme und Sitzungen enthält, ist es möglicherweise einfacher, explizite Aufrufe anSession.run()
.Ich würde empfehlen, dass Sie zumindest die gesamten FAQ überfliegen, da dies viele Dinge klären könnte.
quelle
eval()
kann das Listenobjekt nicht verarbeitenSession.run()
kann aberkorrigiere mich, wenn ich falsch liege
quelle
Das Wichtigste, an das Sie sich erinnern sollten:
Das alles zu wissen ist einfach :
Ich würde die Methode auch
tf.Operation.run()
wie hier skizzieren :quelle
In Tensorflow erstellen Sie Diagramme und übergeben Werte an dieses Diagramm. Graph erledigt die ganze harte Arbeit und generiert die Ausgabe basierend auf der Konfiguration, die Sie im Graph vorgenommen haben. Wenn Sie jetzt Werte an das Diagramm übergeben, müssen Sie zuerst eine Tensorflow-Sitzung erstellen.
Sobald die Sitzung initialisiert wurde, sollten Sie diese Sitzung verwenden, da jetzt alle Variablen und Einstellungen Teil der Sitzung sind. Es gibt also zwei Möglichkeiten, externe Werte an das Diagramm zu übergeben, damit das Diagramm sie akzeptiert. Eine besteht darin, die .run () aufzurufen, während Sie die ausgeführte Sitzung verwenden.
Eine andere Möglichkeit, die im Grunde eine Abkürzung dazu ist, ist die Verwendung von .eval (). Ich sagte Verknüpfung, weil die vollständige Form von .eval () ist
Sie können das selbst überprüfen. Am Ort des
values.eval()
Laufenstf.get_default_session().run(values)
. Sie müssen das gleiche Verhalten erhalten.eval verwendet die Standardsitzung und führt dann run () aus.
quelle
Tensorflow 2.x-kompatible Antwort : Konvertieren des mrry-Codes in
Tensorflow 2.x (>= 2.0)
zum Nutzen der Community.quelle