Publié par

Il y a 5 mois -

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.

Publié par

Publié par Yoann Benoit

Yoann est Data Scientist et Technical Officer chez Xebia. Il travaille sur la création de produits Data Science, de leur exploration à la mise en production. Il intervient sur de nombreux sujets autour de la Data Science, de l'Intelligence Artificielle et du Big Data.

Commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous recrutons

Être un Xebian, c'est faire partie d'un groupe de passionnés ; C'est l'opportunité de travailler et de partager avec des pairs parmi les plus talentueux.