Ein offizielles Tutorial zu @tf.function
sagt:
Verwenden Sie tf.function, um Diagramme aus Ihren Programmen zu erstellen, um Spitzenleistungen zu erzielen und Ihr Modell überall einsetzbar zu machen. Dank AutoGraph funktioniert eine überraschende Menge an Python-Code nur mit tf.function, aber es gibt immer noch Fallstricke, vor denen man sich hüten muss.
Die wichtigsten Erkenntnisse und Empfehlungen sind:
- Verlassen Sie sich nicht auf Python-Nebenwirkungen wie Objektmutation oder Listenanhänge.
- tf.function funktioniert am besten mit TensorFlow-Ops und nicht mit NumPy-Ops oder Python-Primitiven.
- Verwenden Sie im Zweifelsfall das for x in y-Idiom.
Es wird nur erwähnt, wie@tf.function
kommentierte Funktionen implementiert werden, nicht jedoch, wann sie verwendet werden sollen.
Gibt es eine Heuristik, wie man entscheidet, ob ich zumindest versuchen soll, eine Funktion mit Anmerkungen zu versehen tf.function
? Es scheint, dass es keine Gründe gibt, es nicht zu tun, es sei denn, ich bin zu faul, um Nebenwirkungen zu entfernen oder einige Dinge wie range()
-> zu ändern tf.range()
. Aber wenn ich dazu bereit bin ...
Gibt es einen Grund, nicht @tf.function
für alle Funktionen zu verwenden?
tf.function
Anleitung "Dekorieren Sie Funktionen auf Modulebene und Methoden von Klassen auf Modulebene und vermeiden Sie das Dekorieren lokaler Funktionen oder Methoden". Ich scheine mich an explizitere Formulierungen zu erinnern, wie "nicht jede Funktion dekorieren, tf.function
in übergeordneten Funktionen verwenden, wie eine Trainingsschleife", aber ich kann mich falsch erinnern (oder vielleicht wurde sie entfernt). OTOH, diese Diskussion hat interessante Beiträge von Entwicklern, am Ende scheint es in Ordnung zu sein, sie in etwa jeder Funktion für Tensoren / Vars zu verwenden.
@tf.function
kommentierte Funktionen kompilieren auch die Funktionen, die sie selbst für Diagramme aufrufen. Sie müssten also nur den Einstiegspunkt in das Modul mit Anmerkungen versehen, der mit Ihrer Beschreibung übereinstimmt. Es würde aber auch nicht schaden, Funktionen weiter unten im Aufrufstapel manuell zu kommentieren.
tf.function
Benutzer mehrmals aufgerufen wird, kann dies die "Codeduplizierung" in der Grafik nicht verhindern, weshalb eine weit verbreitete Verwendung empfehlenswert erscheint.
tensorflow0.1
,tensorflow0.2
,tensorflow0.3
,tensorflow0.4
,tensorflow0.5
und so weiter, sowie ein Tag für jede diesertf
Module und Klassen dann. Fügen Sie außerdem ein Tag für jedes Standardmodul von Python sowie für seine Funktionen und Klassen hinzu.