Il y a 4 ans -
Temps de lecture 6 minutes
TensorFlow Dev Summit 2019 – Les principales annonces – 2ème partie
Le TensorFlow Dev Summit 2019 a eu lieu le 6 mars dernier, avec comme annonce majeure la release en version alpha de TensorFlow 2.0. Cet évènement a permis de faire un tour d’horizon de toutes les nouveautés apportées au framework sur cette dernière année et de donner quelques projections sur les prochains développements.
Cette série d’articles a pour but de vous résumer les principaux enseignements que nous en avons tiré. Dans l’article précédent, nous avons parlé de TensorFlow 2.0 et de ses APIs haut niveau, et de tf.function et autograph. Passons maintenant à TensorFlow Datasets , TensorBoard et TensorFlow Hub.
TensorFlow Datasets
TensorFlow Datasets apporte une nouvelle manière d’accéder à toute une bibliothèque de datasets ouverts au grand public (ex: imagenet, quickdraw, rock-paper-scissors, imdb reviews, starcraft video, etc.). C’est une librairie accessible sur Github et PyPi, et utilisable directement dans TensorFlow.
Grâce à l’API tf.data, il est possible d’exprimer simplement des pipelines performants de traitement pour les données d’entrée.
ds = create_dataset() ds = ds.map(preprocess, num_parallel_calls=10) ds = ds.shuffle(1024).batch(128).repeat(10) ds = ds.prefetch(10) |
Il reste cependant toujours la problématique de la récupération et de la préparation de la donnée dans un format qui est compatible avec cette API. TensorFlow Datasets a pour objectif de combiner simplement ces deux aspects (données et pipeline de traitement).
TensorFlow Datasets a une API load qui permet de spécifier le dataset en question, ainsi que la manière de faire un split des données et de préciser si c’est pour un objectif d’entraînement supervisé ou non. Cette API cache toute la complexité du chargement et de la manipulation de ces données (fetching des données depuis la source, conversion dans un format adéquat, documentation, etc.).
import tensorflow_datasets as tfds train_ds = tfds.load("mnist", split="train", as_supervised=True) train_ds = train_ds.shuffle(1024).batch(128) for inputs, targets in train_ds.repeat(10): ... |
Pour la donnée texte, il est possible de récupérer certains datasets au format texte brut, mais aussi pré-encodé.
Chaque dataset est packagé via une classe DatasetBuilder, ce qui permettra d’ajouter de nouveaux datasets dans le futur. Cette classe définit 3 méthodes :
- download_and_prepare : Téléchargement et pré-processing des données
- as_dataset : Prends ces données préparées et les convertit au format tf.data.dataset
- info : Création d’un objet de documentation (ex: features qui constituent le dataset)
TensorFlow Datasets est aussi compatible avec l’utilisation de NumPy via la méthode as_numpy qui retourne un iterator sur le dataset.
Il y a à l’heure actuelle une trentaine de datasets à disposition, allant de l’image à l’audio, en passant par le texte, la vidéo, la traduction et la donnée structurée. La liste ne devrait que s’agrandir dans le futur.
Pour voir la vidéo au complet :
What’s new in TensorBoard ?
TensorBoard est l’outil permettant de visualiser de nombreuses données sortant de TensorFlow.
Jusque là, l’utilisation de TensorBoard passait par la récupération des log écrits en local, le lancement de TensorBoard en ligne de commandes et la redirection vers ces logs. Pour contre-passer cela, il est maintenant possible d’incorporer les visualisations TensorBoard directement dans des notebooks Jupyter ou Google Colab (l’outil collaboratif gratuit pour travailler sur des notebooks) sans avoir à passer par son terminal.
Parmi les autres changements, les courbes pour les performances d’entraînement et de validation sont maintenant positionnées sur le même graphe pour pouvoir plus facilement les comparer.
Tuning des hyperparamètres
TensorBoard incorpore maintenant une nouvelle feature pour faciliter la visualisation lors du tuning d’hyperparamètres.
Dans le code, il suffit alors, moyennant quelques nouveaux imports, de définir la liste des valeurs à tester pour chaque hyperparamètre et de faire le log d’un summary pour préciser à TensorBoard quels sont les hyperparamètres que l’on cherche à tuner ainsi que les métriques associées.
Vous trouverez alors un onglet HParams dans TensorBoard qui contient plusieurs vues :
- Une Table View avec une ligne par expérience ;
- Une Parallel Coordinates View, pour avoir une visualisation avec un axe par hyperparamètre
- Une Scatter Plot Matrix View, pour visualiser la corrélation entre les métriques et les hyperparamètres
Un exemple complet se trouve sur la partie dédiée à TensorBoard dans la documentation de TensorFlow.
Pour voir la vidéo au complet :
TensorFlow Hub : Reusable Machine Learning
TensorFlow Hub a été annoncé l’an passé et est un outil intéressant pour la réutilisation de modèles (sous-parties ou entiers) de Machine Learning pré-entraînés sur des tâches spécifiques avec de larges volumes de données. Il est très utile pour toutes les tâches de Transfer Learning lorsque l’on a peu de données pour une tâche notamment. Ces briques de modèles entraînés sont appelés des modules.
Avec l’arrivée de TensorFlow 2.0, de nouvelles features apparaissent avec TensorFlow Hub.
Tout d’abord, le principe de pouvoir sauvegarder une partie d’un modèle et le recharger ensuite pour une autre tâche est maintenant intégré au coeur de TensorFlow.
Ensuite, l’ajout du support de fonctions polymorphiques permet d’avoir une signature plus fluide qu’avant avec la notion de signature. Un module pourra alors simplement être utilisé pour de l’inférence, mais aussi durant l’entraînement d’un modèle.
import tensorflow_hub as hub # Polymorphic functions embed = hub.load("https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/1") embed(images, training=False) embed(images, training=True) embed(images, training=True, batch_norm_momentum=0.98) |
Enfin, l’apparition de hub.KerasLayer permet de faciliter l’intégration de modules TensorFlow Hub dans un modèle Keras, alors qu’il fallait avant cela passer par des Lambdas.
import tensorflow as tf import tensorflow_hub as hub import numpy as np # Integration with Keras model = tf.keras.models.Sequential([ hub.KerasLayer("https://tfhub.dev/google/tf2-preview/nnlm-en-dim128/1", output_shapes=[128]), tf.keras.layers.Dense(16, activation="relu"), tf.keras.layers.Dense(1, activation="sigmoid") ]) model.fit(...) model.predict(np.array(["hello world", "test", "1, 2, 3"])) |
Pour le moment, seuls quelques modèles sont compatibles avec ce format, et les autres vont suivre très rapidement.
Quelques nouveaux modules ont aussi récemment été rajoutés :
- Universal Sentence Encoder : Pour avoir un encoding consistant d’un langage à un autre
- Modules pour de l’Image Augmentation, venant de stratégies trouvées par apprentissage par renforcement sur des tâches avec ImageNet
- Module BERT pour des tâches de NLP
- Modules pour de la détection d’objets
- Et beaucoup d’autres
Enfin, des efforts sont faits pour mieux intégrer TensorFlow Hub avec d’autres morceaux de l’écosystème TensorFlow, comme le fait de convertir un module en un modèle TensorFlow JS en une ligne de commande, ou d’utiliser les modèles avec AdaNet pour de l’AutoML ou enfin une utilisation dans TensorFlow Transform.
Pour voir la vidéo au complet :
Conclusion
Ces deux articles ont permis de faire un overview assez général des principales nouveautés liées à TensorFlow 2.0. De nombreuses autres avancées ainsi que des retours d’expérience ont aussi été présentées lors de cette conférence, et feront probablement l’objet d’autres articles. En attendant, vous pouvez visionner toutes les vidéos de ce 3ème TensorFlow Dev Summit.
Commentaire