
Das Material enthält eine Übersetzung des Handbuchs zum automatischen Aktualisieren von Code von TensorFlow 1.x auf Tensorflow 2 mithilfe des Aktualisierungsskripts
tf_upgrade_v2
.
TensorFlow 2.0 enthält viele API-Änderungen, z. B. das Ändern der Reihenfolge von Argumenten, das Umbenennen von Zeichen und das Ändern von Standardwerten für Parameter. Die manuelle Korrektur all dieser Änderungen ist mühsam und fehleranfällig. Um die Änderungen zu vereinfachen und den Übergang zu TF 2.0 so reibungslos wie möglich zu gestalten, hat das TensorFlow-Team das Dienstprogramm
tf_upgrade_v2
, um den Übergang vom
tf_upgrade_v2
Code zur neuen API zu
tf_upgrade_v2
.
Hinweis: tf_upgrade_v2
automatisch für TensorFlow 1.13 und tf_upgrade_v2
installiert (einschließlich aller TF 2.0-Builds).
Eine typische Verwendung des Skripts sieht folgendermaßen aus:
tf_upgrade_v2 \ --intree my_project/ \ --outtree my_project_v2/ \ --reportfile report.txt
Dieser Code beschleunigt den Upgrade-Prozess, indem vorhandene TensorFlow 1.x-Python-Skripte in TensorFlow 2.0 konvertiert werden.
Das Konvertierungsskript automatisiert den Prozess so weit wie möglich, es gibt jedoch syntaktische und stilistische Änderungen, die vom Skript nicht behoben werden können.
Kompatibilitätsmodule
Einige API-Zeichen können nicht einfach durch Ersetzen von Zeichenfolgen aktualisiert werden. Um sicherzustellen, dass Ihr Code in TensorFlow 2.0 funktioniert, enthält das Aktualisierungsskript das Modul
compat.v1
. Dieses Modul ersetzt TF 1.x-Zeichen wie z. B.
tf.foo
durch den entsprechenden Link
tf.compat.v1.foo
. Obwohl das Kompatibilitätsmodul gut ist, empfehlen wir, die Ersetzungen manuell zu subtrahieren und sie auf die neuen APIs im
tf. *
Namespace zu migrieren
tf. *
tf. *
Anstelle des Namensraums
tf.compat.v1
so schnell wie möglich.
Aufgrund der Abschreibung von TensorFlow 2.x-Modulen (z. B.
tf.flags
und
tf.contrib
) können einige Änderungen nicht durch Umschalten auf
compat.v1
umgangen werden. Das Aktualisieren eines solchen Codes erfordert möglicherweise die Verwendung einer zusätzlichen Bibliothek (z. B.
absl.flags
oder das Wechseln zu einem Paket in
tenorflow/addons
.
Empfohlener Update-Vorgang
Dieser Teil des Handbuchs zeigt die Verwendung des Aktualisierungsskripts. Obwohl das Aktualisierungsskript einfach zu verwenden ist, wird dringend empfohlen, dass Sie das Skript als Teil des folgenden Prozesses verwenden:
- Unit-Tests : Stellen Sie sicher, dass der aktualisierte Code eine Reihe von Unit-Tests mit angemessener Abdeckung enthält. Dies ist Python-Code, daher schützt Sie die Sprache nicht vor vielen Fehlerklassen. Stellen Sie außerdem sicher, dass alle Abhängigkeiten so aktualisiert wurden, dass sie mit TensorFlow 2.0 kompatibel sind.
- Installation von TensorFlow 1.14 : Aktualisieren Sie Ihren TensorFlow auf die neueste Version von TensorFlow 1.x, mindestens 1.14. Es enthält die endgültige TensorFlow 2.0-API unter
tf.compat.v2
. - Testcode mit 1.14 : Stellen Sie sicher, dass Ihre Einheitentests zu diesem Zeitpunkt erfolgreich sind. Sie werden sie während des Aktualisierungsprozesses neu starten, daher ist es wichtig, mit einer grünen Farbe zu beginnen.
- Führen Sie das Aktualisierungsskript aus : Führen Sie
tf_upgrade_v2
für den gesamten tf_upgrade_v2
einschließlich der Tests aus. Dadurch wird Ihr Code auf ein Format aktualisiert, in dem nur die in TensorFlow 2.0 verfügbaren Zeichen verwendet werden. Veraltete Zeichen sind in tf.compat.v1
verfügbar. Sie müssen anschließend manuell verarbeitet werden. \ N ", - Führen Sie konvertierte Tests mit TensorFlow 1.14 aus : Ihr Code sollte in TensorFlow 1.14 weiterhin korrekt ausgeführt werden. Führen Sie die Einheitentests erneut durch. Jeder Fehler in Ihren Tests zu diesem Zeitpunkt bedeutet, dass das Aktualisierungsskript fehlerhaft ist.
- Überprüfen Sie den Aktualisierungsbericht auf Warnungen und Fehler : Das Skript schreibt eine Berichtsdatei, in der alle zu überprüfenden Konvertierungen oder alle manuell auszuführenden Aktionen erläutert werden. Beispiel: Alle verbleibenden Contrib-Instanzen müssen manuell entfernt werden.
- TensorFlow 2.0 installieren : Zu diesem Zeitpunkt sollte der Wechsel zu TensorFlow 2.0 sicher sein.
- Testen Sie den Code mit
v1.disable_v2_behavior
: v1.disable_v2_behavior
Ihre Tests mit v1.disable_v2_behavior()
in der Haupttestfunktion neu. Die Ergebnisse sollten dieselben sein wie unter 1.14. - V2-Verhalten aktivieren : Jetzt, da Ihre Tests über die v2-API ausgeführt werden, können Sie die Einbeziehung des
v2 behavior
. Abhängig davon, wie Ihr Code geschrieben ist, sind möglicherweise einige Änderungen erforderlich.
Verwenden des Update-Skripts
Installation
from __future__ import absolute_import, division, print_function, unicode_literals
try: import tensorflow.compat.v2 as tf except Exception: pass tf.enable_v2_behavior() print(tf.__version__)
Klonen Sie das
Tensorflow / Modell- Repository, damit Sie etwas Code zum Experimentieren haben:
!git clone --branch r1.13.0 --depth 1 https://github.com/tensorflow/models
Lesen Sie die Hilfe
Das Skript muss mit TensorFlow installiert werden. Die eingebaute Hilfe lautet wie folgt:
!tf_upgrade_v2 -h
TF1-Codebeispiel
Hier ist ein einfaches TensorFlow 1.0-Skript, das nicht unter TensorFlow 2.0 ausgeführt werden kann
!head -n 65 models/samples/cookbook/regression/custom_regression.py | tail -n 10
folgenden Fehler melden:
Traceback (most recent call last): File "custom_regression.py", line 162, in <module> tf.logging.set_verbosity(tf.logging.INFO) AttributeError: module 'tensorflow' has no attribute 'logging'
Einzelne Datei
Das Update-Skript kann in einer separaten Python-Datei ausgeführt werden:
!tf_upgrade_v2 \ --infile models/samples/cookbook/regression/custom_regression.py \ --outfile /tmp/custom_regression_v2.py
Das Skript zeigt Fehler an, wenn es keine Korrekturen für den Code finden kann.
INFO line 38:8: Renamed 'tf.feature_column.input_layer' to 'tf.compat.v1.feature_column.input_layer' INFO line 43:10: Renamed 'tf.layers.dense' to 'tf.compat.v1.layers.dense' INFO line 46:17: Renamed 'tf.layers.dense' to 'tf.compat.v1.layers.dense' INFO line 57:17: tf.losses.mean_squared_error requires manual check. tf.losses have been replaced with object oriented versions in TF 2.0 and after. The loss function calls have been converted to compat.v1 for backward compatibility. Please update these calls to the TF 2.0 versions. INFO line 57:17: Renamed 'tf.losses.mean_squared_error' to 'tf.compat.v1.losses.mean_squared_error' INFO line 61:15: Added keywords to args of function 'tf.shape' INFO line 62:15: Changed tf.to_float call to tf.cast(..., dtype=tf.float32). INFO line 65:40: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer' INFO line 68:39: Renamed 'tf.train.get_global_step' to 'tf.compat.v1.train.get_global_step' INFO line 83:9: tf.metrics.root_mean_squared_error requires manual check. tf.metrics have been replaced with object oriented versions in TF 2.0 and after. The metric function calls have been converted to compat.v1 for backward compatibility. Please update these calls to the TF 2.0 versions. INFO line 83:9: Renamed 'tf.metrics.root_mean_squared_error' to 'tf.compat.v1.metrics.root_mean_squared_error' INFO line 142:23: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer' INFO line 162:2: Renamed 'tf.logging.set_verbosity' to 'tf.compat.v1.logging.set_verbosity' INFO line 162:27: Renamed 'tf.logging.INFO' to 'tf.compat.v1.logging.INFO' INFO line 163:2: Renamed 'tf.app.run' to 'tf.compat.v1.app.run' TensorFlow 2.0 Upgrade Script ----------------------------- Converted 1 files Detected 0 issues that require attention -------------------------------------------------------------------------------- Make sure to read the detailed log 'report.txt'
Verzeichnisbaum
Typische Projekte, einschließlich dieses einfachen Beispiels, verwenden mehr als eine Datei. Normalerweise möchten Sie das gesamte Paket aktualisieren, damit das Skript auch in der Verzeichnisstruktur ausgeführt werden kann:
Beachten Sie eine Bemerkung zur Funktion
dataset.make_one_shot_iterator
.
Jetzt arbeitet das Skript bereits mit TensorFlow 2.0.
Beachten Sie, dass das konvertierte Skript aufgrund des Moduls `tf.compat.v1` auch in TensorFlow 1.14 ausgeführt wird.
Ausführlicher Bericht
Das Skript veröffentlicht auch eine detaillierte Liste der Änderungen. In diesem Beispiel fand er eine möglicherweise unsichere Umwandlung und fügte am Anfang der Datei eine Warnung hinzu:
!head -n 20 tree_report.txt
TensorFlow 2.0 Upgrade Script ----------------------------- Converted 7 files Detected 1 issues that require attention -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- File: models/samples/cookbook/regression/automobile_data.py -------------------------------------------------------------------------------- models/samples/cookbook/regression/automobile_data.py:125:15: WARNING: Changing dataset.make_one_shot_iterator() to tf.compat.v1.data.make_one_shot_iterator(dataset). Please check this transformation. ================================================================================ Detailed log follows: ================================================================================ ================================================================================ Input tree: 'models/samples/cookbook/regression/' ================================================================================ -------------------------------------------------------------------------------- Processing file 'models/samples/cookbook/regression/custom_regression.py' outputting to 'regression_v2/custom_regression.py'
Dataset.make_one_shot_iterator function
einmal eine Bemerkung zur
Dataset.make_one_shot_iterator function
.
Abgesicherter Modus
Das Konvertierungsskript verfügt auch über einen weniger invasiven „SECURE“ -Modus, der den Import einfach so ändert, dass das Modul
tensorflow.compat.v1
wird.
!tf_upgrade_v2 --mode SAFETY --infile dropout.py --outfile dropout_v2_safe.py > /dev/null
Zum Beispiel Code:
import tensorflow as tf d = tf.nn.dropout(tf.range(10), 0.2) z = tf.zeros_like(d, optimize=False)
in diesem Modus wird in Folgendes konvertiert:
import tensorflow.compat.v1 as tf tf.disable_v2_behavior() d = tf.nn.dropout(tf.range(10), 0.2) z = tf.zeros_like(d, optimize=False)
Wie Sie sehen, wurde Ihr Code nicht aktualisiert, aber jetzt wird der TensorFlow 1-Code in TensorFlow 2 ausgeführt.
Warnungen
- Aktualisieren Sie Teile Ihres Codes nicht manuell, bevor Sie das Skript ausführen. Insbesondere Funktionen mit neu geordneten Argumenten, wie z. B.
tf.argmax
oder tf.batch_to_space
, erzwingen, dass das Skript fälschlicherweise Schlüsselwortargumente hinzufügt, was Ihren vorhandenen Code verwirrt. - Das Skript geht davon aus, dass
tensorflow
importiert wird, indem import tensorflow as tf
importiert wird - Das Skript ordnet die Argumente nicht neu an. Stattdessen fügt das Skript die Schlüsselwörter der Argumente zu den Funktionen hinzu, in denen die Argumente umgekehrt werden.
Nach der Überprüfung wird die Übersetzung auch auf Tensorflow.org angezeigt. Wenn Sie an der Übersetzung der Dokumentation der Tensorflow.org-Website ins Russische teilnehmen möchten, wenden Sie sich bitte an eine Person oder einen Kommentar. Korrekturen oder Kommentare sind willkommen.