Cet article est la suite de TensorFlow – tutoriel #1

Le précédent tutoriel s’appuyait sur Getting Started for ML Beginners sur le site officiel de TensorFlow alors que celui-ci s’appuie sur Getting Started with TensorFlow

Le programme décrit est le même dans les deux tutoriels. Il s’agit de celui que j’ai légèrement modifié afin qu’il soit accessible sous Jupyter en un seul fichier pour faciliter la lecture.

Getting Started with TensorFlow n’apporte pas beaucoup plus que Getting Started for ML Beginners mais c’est l’occasion de revenir sur quelques concepts et spécificités de TensorFlow (TF).

Datasets

TensorFlow recommande (fortement) d’utiliser les API Datasets et Estimators.

Datasets, which build a data input pipeline. The Dataset API has methods to load and manipulate data, and feed it into your model.

Lecture des données

Prenons de nouveau l’exemple Iris. La lecture des données se fait avec 2 fonctions : maybe_download() et load_data().

load_data() appelle maybe_download()

maybe_download() stocke en cache les fichiers Iris  (en utilisant l’API Keras) et load_data() lit les fichiers (format cdv). Les données qui sont récupérées sont celles présentes sur le site de TensorFlow et non celles stockées par sklearn.

Les données Iris (voir The Iris Dataset) forment un jeu de 150 éléments qui a été séparé en 2 lots par TF pour les besoins du tutoriel. Le 1 er lot de 120 éléments sert à l’apprentissage. Le 2nd sert à l’estimation (au test) du modèle.

On a plus l’habitude de lire ce données de la façon suivante.

Le code suivant n’est pas intuitif pour un béotien en Python.

Il faut comprendre que load_data() retourne 2 jeux de données (train) pour l’apprentissage et (test) pour l’estimation du modèle. Ces jeux de données sont structurés en features (les données) et labels (les étiquettes associées aux items).

Conversion des données en Dataset

Un Dataset contient des éléments structurés. Shapes et Types du Dataset font partie de la structure.
Le Dataset créé par train_input_fn contient en plus le labels (de type int64)
Notez (en plus à l’exemple précédent) le labels de type int64

Manipulation des données

A un moment, dans le programme, on fait un shuffle des données. (to shuffle : mélanger)? Pourquoi fait-on ça ?

Je renvoie à différents articles sur le sujet Does the order of training data matter when training neural networks? qui montrent que l’ordre d’apprentissage des données a une importance élevée sur l’apprentissage – surtout lorsque les données sont enregistrées selon une logique.

In cases such as these where the order of the dataset holds some significance, it is necessary to shuffle the examples before selecting minibatches. For very large datasets, for example datasets containing billions of examples in a data center, it can be impractical to sample examples truly uniformly at random every time we want to construct a minibatch. Fortunately, in practice it is usually sufficient to shuffle the order of the dataset once and then store it in shuffled fashion.

Deep Learning – Ian Goodfellow Yoshua Bengio Aaron Courville

 

The shuffle method uses a fixed-size buffer to shuffle the items as they pass through. Setting a buffer_size greater than the number of examples in the Dataset ensures that the data is completely shuffled. The Iris data set only contains 150 examples.

The repeat method has the Dataset restart when it reaches the end. To limit the number of epochss, set the count argument.

The batch method collects a number of examples and stacks them, to create batches. This adds a dimension to their shape. The new dimension is added as the first dimension. The following code uses the batch method on the MNIST Dataset, from earlier. This results in a Dataset containing 3D arrays representing stacks of (28,28) images:

Estimateurs

Dans la terminologie de TensorFlow, un estimateur est la représentation complète d’un modèle. L’API estimateur est l’élément central de TensorFlow. C’est avec l’estimateur qu’on effectue l’apprentissage et qu’on qualifie sa qualité.

An Estimator is TensorFlow’s high level representation of a complete model. It handles the details of initialization, logging, saving and restoring, and many other features so you can concentrate on your model.

Etant donné un modèle (spécifié par un model_fn), avec ses inputs (et d’autres paramètres) l’Estimator va fournir les opérations nécessaires à l’apprentissage, à l’évaluation et aux prédictions.

Ce qui fait la force de Tensorflow (pour les débutants) c’est le nombre d’Estimator pré-définis.

Pour utiliser les Estimators pré-définis, il faut appliquer la séquence suivante :

  • Créer une ou plusieurs input functions.
  • Définir le modèle de feature columns
  • Instanter un Estimator
  • Appeler les méthodes sur l’Estimator

Input function

Une input function est une fonction qui retourne un  the 2-tuple:

  • « features » – (dictionary)
    le key est le nom du feature.
    et les features valeurs.
  • « label » – (un tableau)
    les valeurs du label

 

Supposons le tableau de données suivant :

SepalLength SepalWidth PetalLength PetalWidth labels
6.4 2.8 5.6 2.2 2
5.0 2.3 3.3 1.0 1

L’input function peut être définie de la façon suivante :

l’appel

affichera :

Feature columns

Il faut indiquer à TF comment interpréter les données brutes du dictionnaire features.
Dans le cas Iris, c’est simple car les valeurs sont de type numérique. On choisit de les interpréter comment des flottants.

L’affichage de my_feature_columns :

Evidemment, ça peut être beaucoup plus compliqué. Nous y reviendrons.

Instanter un Estimator

TF propose une variété importante d’estimateurs. Pour les problèmes de classification, tels que celui qui nous concerne, nous avons le choix :

(note : DNN Deep Neural Network)

Celui, reconnu le plus pertinent, dans ce cas, est tf.estimator.DNNClassifier.

Appeler les méthodes sur l’Estimator : Apprentissage, Evaluation et Prediction

Apprentissage

On a notre input fonction, on a défini le feature_columns et on a défini l’estimateur (classifier). On peut procéder à l’apprentissage.

On a aussi un hyperparamètre (training steps)

Evaluation

L’évaluation est similaire à l’apprentissage. Les données sont celles du test.

Prédiction

Idem pour les prédictions. Sauf que nous n’avons pas de labels.

Laisser un commentaire

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