TensorFlow est une plate-forme logicielle permettant de créer des modèles de machine learning (ML).

Si vous êtes débutant avec TensorFlow, commencez par lire Get Started with TensorFlow sur le site officiel de TensorFlow puis Train your first Neural Network

Ce tutoriel présente un logiciel de classification d’iris (assez classique dans le domaine du Deep Learning (DL)). C’est un peu le Hello World du DL (avec MNIST). Des bases de données d’exemples sont accessibles à tous sur Internet afin de s’entraîner et tester des modèles de classification (ou de régression). Ce tutoriel s’appuie uniquement sur Getting Started for ML Beginners.

Le logiciel source est disponible (cf. git clone https://github.com/tensorflow/models)

J’ai modifié ce logiciel (voir ici avec Colab) afin que toutes les fonctions soient accessibles dans le même fichier et j’ai ajouté quelques commentaires. Ma version du logiciel est aussi un peu différente car elle s’exécute dans l’environnement Jupyter. Au lieu de passer des arguments dans le main, j’utilise des constantes.

A part, ces quelques modifications mineures, le code est exactement le même.

J’ajoute ici quelques commentaires qui j’espère aideront à mieux comprendre ce premier tutoriel. En effet sauf si le DL n’a plus de secrets pour vous et que vous programmez chaque jour en Python avec NumPy, Pandas, … alors il risque d’y avoir quelques lignes difficilement compréhensibles.

Je me doute bien que si vous avez atterri sur cette page, ces mots-clés ne sont pas ésotériques pour vous mais de là à en faire votre pain quotidien !

On y va !

On a un jeu de données (iris) qui est séparé en deux. Une partie sert à l’apprentissage (train), l’autre partie sert au test. C’est la pratique habituelle (indispensable)  en DL.

Vous pouvez lire ici, en introduction le tutoriel rédigé pour la version 2 de TensorFlow.

Importation des données

Vous remarquez que les fichiers sont lus avec tf.keras.utils.get_file.

Keras est une sur-couche à TensorFlow. Son intérêt est d’être compatible avec différents logiciels de DL (TensorFlow, CNTK, Theano).

Le fichier lu sur le réseau est stocké en local (en cache)

Comme dit précédemment, sans le domaine du DL, en Python, on utilise souvent les packages pandas, scikit-learn, numpy. On aurait pu lire les data avec sklearn, ça aurait été plus simple…

Les arguments de pd.read_csv :

filepath_or_buffer : str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)
The string could be a URL. Valid URL schemes include http, ftp, s3, and file. For file URLs, a host is expected. For instance, a local file could be file ://localhost/path/to/table.csv

names : array-like, default None
List of column names to use. If file contains no header row, then you should explicitly pass header=None. Duplicates in this list will cause a UserWarning to be issued.

Description des données

Ici, nous sommes dans un cas simple. Les données (features) sont simples à interpréter.

Le seul argument utilisé par tf.feature_column.numeric_column est key :
key : A unique string identifying the input feature. It is used as the column name and the dictionary key for feature parsing configs, feature Tensor objects, and feature columns.

Sélection du modèle

Il s’agit d’un réseau de neurones à trois couches (2 couches cachées). Chaque couche dispose de 10 neurones. Pourquoi 3 couches ? pourquoi 10 neurones ? ce n’est pas l’objet de ce tutoriel. Je reviendrai plus tard, dans un autre article, sur cette question.

Apprentissage du modèle

définition de la fonction d’apprentissage

appel de la fonction d’apprentissage

Evaluation du modèle

définition de la fonction d’évaluation

appel de la fonction d’évaluation

Prédictions

Conclusion

Nous n’avons que deux hyperparamètres :

Lorsque ces valeurs sont celles par défaut, le Test set accuracy est 0.967.Prediction is « Setosa » (93.9%), expected « Setosa »Prediction is « Versicolor » (73.8%), expected « Versicolor »Prediction is « Virginica » (81.6%), expected « Virginica »

Quel est l’effet d’un changement de ces valeurs ? Note : avec les mêmes paramètres, à chaque fois le résultat est différent. Nous y reviendrons.

En augmentant le nombre de training steps :

Le Test set accuracy: 0.967 reste exactement le même. Par contre nous avons une amélioration sur nos prédictions.

Prediction is « Setosa » (99.1%), expected « Setosa »
Prediction is « Versicolor » (96.5%), expected « Versicolor »
Prediction is « Virginica » (83.9%), expected « Virginia »

En diminuant le nombre de training steps :

Le Test set accuracy: 0.967 reste exactement le même mais nous avons une détérioration sur nos prédictions.

Prediction is « Setosa » (92.4%), expected « Setosa »
Prediction is « Versicolor » (76.4%), expected « Versicolor »
Prediction is « Virginica » (65.9%), expected « Virginica »

En augmentant le batch size :

Le Test set accuracy: 0.967 reste exactement le même et nous avons une amélioration sur nos prédictions.

Prediction is « Setosa » (98.4%), expected « Setosa »
Prediction is « Versicolor » (87.7%), expected « Versicolor »
Prediction is « Virginica » (76.5%), expected « Virginia »

En diminuant le batch size :

Le Test set accuracy: 0.967 reste exactement le même et nous avons une amélioration sur nos prédictions.

Prediction is « Setosa » (98.0%), expected « Setosa »
Prediction is « Versicolor » (87.1%), expected « Versicolor »
Prediction is « Virginica » (88.4%), expected « Virginia »

En augmentant le le nombre de training steps et le batch size :

Le Test set accuracy: 0.967 reste exactement le même et nous avons une amélioration encore supérieure sur nos prédictions.

Prediction is « Setosa » (98.9%), expected « Setosa »
Prediction is « Versicolor » (98.7%), expected « Versicolor »
Prediction is « Virginica » (94.0%), expected « Virginica »

Laisser un commentaire

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