
Le matériel fournit une traduction du manuel de mise à jour automatique du code de TensorFlow 1.x vers Tensorflow 2 à l'aide du script de mise à jour
tf_upgrade_v2
.
TensorFlow 2.0 inclut de nombreuses modifications d'API, telles que la modification de l'ordre des arguments, le changement de nom des caractères et la modification des valeurs par défaut des paramètres. La correction manuelle de toutes ces modifications est fastidieuse et sujette aux erreurs. Pour simplifier les changements et rendre votre transition vers TF 2.0 aussi fluide que possible, l'équipe TensorFlow a créé l'utilitaire
tf_upgrade_v2
pour vous aider à passer du code hérité à la nouvelle API.
Remarque: tf_upgrade_v2
installé automatiquement pour TensorFlow 1.13 et versions ultérieures (y compris toutes les versions de TF 2.0).
Une utilisation typique du script ressemble à ceci:
tf_upgrade_v2 \ --intree my_project/ \ --outtree my_project_v2/ \ --reportfile report.txt
Ce code accélère le processus de mise à niveau en convertissant les scripts Python TensorFlow 1.x existants en TensorFlow 2.0.
Le script de conversion automatise le processus autant que possible, mais il existe toujours des modifications syntaxiques et stylistiques qui ne peuvent pas être corrigées par le script.
Modules de compatibilité
Certains caractères API ne peuvent pas être mis à jour simplement en utilisant le remplacement de chaîne. Pour vous assurer que votre code fonctionne dans TensorFlow 2.0, le script de mise à jour inclut le module
compat.v1
. Ce module remplace les caractères TF 1.x, tels que
tf.foo
, par le lien équivalent
tf.compat.v1.foo
. Bien que le module de compatibilité soit bon, nous vous recommandons de soustraire manuellement les remplacements et de les migrer vers les nouvelles API dans l'espace de noms
tf. *
tf. *
au lieu de l'espace de noms
tf.compat.v1
aussi rapidement que possible.
En raison de la dépréciation des modules TensorFlow 2.x (par exemple,
tf.flags
et
tf.contrib
), certaines modifications ne peuvent pas être contournées en passant à
compat.v1
. La mise à jour de ce code peut nécessiter l'utilisation d'une bibliothèque supplémentaire (par exemple,
absl.flags
ou le passage à un package dans
tenorflow/addons
.
Processus de mise à jour recommandé
Cette partie du manuel montre l'utilisation du script de mise à jour. Bien que le script de mise à jour soit facile à utiliser, nous vous recommandons vivement d'utiliser le script dans le cadre du processus suivant:
- Tests unitaires : assurez-vous que le code mis à jour dispose d'un ensemble de tests unitaires avec une couverture raisonnable. Il s'agit de code Python, donc le langage ne vous protégera pas de nombreuses classes d'erreur. Assurez-vous également que toutes vos dépendances ont été mises à jour pour être compatibles avec TensorFlow 2.0.
- Installez TensorFlow 1.14 : mettez à niveau votre TensorFlow vers la dernière version de TensorFlow 1.x, au moins 1.14. Il inclut la dernière API TensorFlow 2.0 sur
tf.compat.v2
. - Testez le code avec 1.14 : assurez-vous que vos tests unitaires réussissent à ce stade. Vous les redémarrerez pendant le processus de mise à niveau, il est donc important de commencer par une couleur verte.
- Exécutez le script de mise à jour :
tf_upgrade_v2
sur l'arborescence source entière, y compris les tests. Cela mettra à jour votre code dans un format dans lequel il n'utilisera que les caractères disponibles dans TensorFlow 2.0. Les caractères obsolètes seront disponibles sur tf.compat.v1
. Ils nécessiteront par la suite un traitement manuel. \ N ", - Exécutez des tests convertis avec TensorFlow 1.14 : votre code doit toujours fonctionner correctement dans TensorFlow 1.14. Exécutez à nouveau les tests unitaires. Toute erreur dans vos tests à ce stade signifie qu'il y a une erreur dans le script de mise à jour.
- Recherchez des avertissements et des erreurs dans le rapport de mise à jour : le script écrit un fichier de rapport expliquant toutes les conversions que vous devez revérifier ou toutes les actions qui doivent être effectuées manuellement. Par exemple: toutes les instances de contrib restantes doivent être supprimées manuellement.
- Installer TensorFlow 2.0 : à ce stade, le passage à TensorFlow 2.0 devrait être sûr.
- Testez le code avec
v1.disable_v2_behavior
: redémarrez vos tests avec v1.disable_v2_behavior()
dans la fonction de test principale, les résultats doivent être les mêmes que lors de l'exécution sous 1.14. - Activer le comportement V2 : Maintenant que vos tests sont en cours d'exécution à l'aide de l'API v2, vous pouvez commencer à regarder l'inclusion du
v2 behavior
. Selon la façon dont votre code est écrit, cela peut nécessiter certaines modifications.
Utilisation du script de mise à jour
L'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__)
Clonez le référentiel
tensorflow / models pour avoir du code d'expérimentation:
!git clone --branch r1.13.0 --depth 1 https://github.com/tensorflow/models
Lire l'aide
Le script doit être installé avec TensorFlow. L'aide intégrée est appelée comme ceci:
!tf_upgrade_v2 -h
Exemple de code TF1
Voici un simple script TensorFlow 1.0 qui ne s'exécute pas sur TensorFlow 2.0
!head -n 65 models/samples/cookbook/regression/custom_regression.py | tail -n 10
donnant l'erreur suivante:
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'
Fichier unique
Le script de mise à jour peut être exécuté sur un fichier Python distinct:
!tf_upgrade_v2 \ --infile models/samples/cookbook/regression/custom_regression.py \ --outfile /tmp/custom_regression_v2.py
Le script affichera des erreurs s'il ne trouve pas de corrections pour le code.
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'
Arborescence de répertoires
Les projets typiques, y compris cet exemple simple, utilisent plusieurs fichiers. Habituellement, vous souhaitez mettre à jour l'ensemble du package, afin que le script puisse également être exécuté sur l'arborescence de répertoires:
Faites attention à une remarque sur la fonction
dataset.make_one_shot_iterator
.
Maintenant, le script fonctionne déjà avec TensorFlow 2.0.
Notez qu'en raison du module `tf.compat.v1`, le script converti s'exécutera également dans TensorFlow 1.14.
Rapport détaillé
Le script publie également une liste détaillée des modifications. Dans cet exemple, il a trouvé une transformation potentiellement dangereuse et a ajouté un avertissement en haut du fichier:
!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'
Faites à nouveau attention à une remarque sur la
Dataset.make_one_shot_iterator function
.
Mode sans échec
Le script de conversion dispose également d'un mode «SÉCURISÉ» moins invasif qui modifie simplement les importations pour utiliser le module
tensorflow.compat.v1
.
!tf_upgrade_v2 --mode SAFETY --infile dropout.py --outfile dropout_v2_safe.py > /dev/null
Par exemple, le code:
import tensorflow as tf d = tf.nn.dropout(tf.range(10), 0.2) z = tf.zeros_like(d, optimize=False)
dans ce mode est converti comme suit:
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)
Comme vous pouvez le voir, votre code n'a pas été mis à jour, mais maintenant le code TensorFlow 1 s'exécute dans TensorFlow 2.
Avertissements
- Ne mettez pas à jour des parties de votre code manuellement avant d'exécuter le script. En particulier, les fonctions avec des arguments réorganisés, tels que
tf.argmax
ou tf.batch_to_space
, forceront le script à ajouter incorrectement des arguments de mots clés, ce qui confondra votre code existant. - Le script suppose que
tensorflow
importé en utilisant import tensorflow as tf
- Le script ne réorganise pas les arguments. Au lieu de cela, le script ajoute les mots clés des arguments aux fonctions dans lesquelles les arguments sont inversés.
Après vérification, la traduction apparaîtra également sur Tensorflow.org. Si vous souhaitez participer à la traduction de la documentation du site Tensorflow.org en russe, veuillez nous contacter à titre personnel ou commentaires. Toutes corrections ou commentaires sont appréciés.