À propos de cet atelier de programmation
1. Avant de commencer
Dans cet atelier de programmation, vous apprendrez les bases du ML, où, au lieu de programmer des règles explicites dans un langage tel que Java ou C++, vous allez créer un système entraîné à partir de données afin d'en déduire les règles qui déterminent une relation entre les nombres.
Réfléchissez au problème suivant: vous créez un système capable de reconnaître l'activité pour le suivi de la forme physique. Vous pouvez avoir accès à la vitesse à laquelle une personne marche et tenter de déduire son activité à partir de cette vitesse à l'aide d'une expression conditionnelle.
if(speed<4){
status=WALKING;
}
Vous pouvez l'étendre à une autre condition.
if(speed<4){
status=WALKING;
} else {
status=RUNNING;
}
Dans une dernière condition, vous pouvez également détecter le cyclisme.
if(speed<4){
status=WALKING;
} else if(speed<12){
status=RUNNING;
} else {
status=BIKING;
}
Réfléchissez maintenant à ce qui se passe lorsque vous souhaitez inclure une activité telle que le golf. Il est moins évident de créer une règle pour déterminer l'activité.
// Now what?
Il est extrêmement difficile de rédiger un programme qui reconnaîtra l'activité du golf. Que devez-vous faire ? Vous pouvez utiliser le machine learning pour résoudre le problème.
Conditions préalables
Avant d'effectuer cet atelier de programmation, vous devrez:
- Une connaissance approfondie de Python
- Compétences de base en programmation
Points abordés
- Les bases du machine learning
Objectifs de l'atelier
- Votre premier modèle de machine learning
Prérequis
Si vous n'avez jamais créé de modèle de ML avec TensorFlow, vous pouvez utiliser Colaboratory, un environnement basé sur un navigateur qui contient toutes les dépendances requises. Vous trouverez le code pour le reste de l'atelier de programmation en cours d'exécution dans Colab.
Si vous utilisez un autre IDE, assurez-vous que Python est installé. Vous aurez également besoin de TensorFlow et de la bibliothèque NumPy. Pour en savoir plus et installer TensorFlow, Installez NumPy ici.
2. En quoi consiste le ML ?
Considérez la méthode traditionnelle de création d'applications, comme illustré dans le schéma suivant:
Vous exprimez des règles dans un langage de programmation. Elles agissent sur les données et votre programme fournit des réponses**.** Dans le cas de la détection d'activité, les règles (le code que vous avez écrit pour définir les types d'activité) ont pris en compte les données (vitesse de mouvement de la personne) pour produire une réponse: la valeur de retour de la fonction permettant de déterminer l'état d'activité de l'utilisateur (qu'il marchait, courir, faire du vélo ou faire autre chose)
Le processus permettant de détecter cet état d'activité via le machine learning est très similaire, mais seuls les axes sont différents.
Au lieu d'essayer de définir les règles et de les exprimer dans un langage de programmation, vous fournissez les réponses (généralement appelées libellés) ainsi que les données. La machine déduit les règles qui déterminent la relation entre les réponses et les données. Par exemple, votre scénario de détection d'activité peut se présenter comme suit dans un contexte de ML:
Vous recueillez beaucoup de données et ajoutez-y des libellés pour dire « À quoi ressemble la marche » ou encore » Voici à quoi ressemble la course à pied. Ensuite, l'ordinateur peut déduire les règles qui déterminent, à partir de ces données, les schémas distincts qui indiquent une activité particulière.
Au-delà d'une méthode alternative à la programmation de ce scénario, cette approche vous donne la possibilité d'ouvrir de nouveaux scénarios, comme celui qui n'aurait pas été possible avec l'approche de programmation traditionnelle basée sur des règles.
En programmation traditionnelle, votre code est compilé dans un binaire généralement appelé programme. Dans le ML, l'élément que vous créez à partir des données et des étiquettes est appelé un modèle.
Si vous revenez à ce diagramme:
Considérez ce résultat comme un modèle utilisé comme suit au moment de l'exécution:
Vous transmettez certaines données au modèle, qui utilise les règles qu'il a déduites de l'entraînement pour effectuer des prédictions, par exemple "Ces données semblent être à pied, à pied" ou "à vélo".
3. Créer votre premier modèle de ML
Considérons les ensembles de nombres suivants. Voyez-vous la relation entre ces deux éléments ?
X : | -1 | 0 | 1 | 2 | 3 | 4 |
Y : | -2 | 1 | 4 | 7 | 10 | 13 |
En examinant ces éléments, vous remarquerez peut-être que la valeur de X augmente de 1 lorsque vous lisez de gauche à droite, et que la valeur de Y augmentera de 3. Vous pensez probablement que Y est égal à 3X plus ou moins. Ensuite, vous regardez probablement X sur la valeur X et voyez que Y est égal à 1 et que vous voyez la relation Y=3X+1.
C'est presque exactement comment vous utiliseriez le code pour entraîner un modèle à repérer les schémas dans les données.
Pour ce faire, consultez le code concerné.
Comment entraîneriez-vous un réseau de neurones à effectuer la tâche équivalente ? Utilisation des données... En renseignant un ensemble de X et un ensemble de Y's, il doit pouvoir comprendre la relation entre eux.
Importations
Commencez par les importations. Dans cet atelier, vous allez importer TensorFlow et l'appeler tf
pour faciliter son utilisation.
Ensuite, importez une bibliothèque appelée numpy
qui représente vos données facilement et rapidement sous forme de listes.
Le framework qui permet de définir un réseau de neurones en tant qu'ensemble de couches séquentielles est appelé keras
. Vous devez donc l'importer également.
import tensorflow as tf
import numpy as np
from tensorflow import keras
Définir et compiler le réseau de neurones
Créez ensuite le réseau de neurones le plus simple possible. Il possède une couche, une couche avec un neurone, et la forme en entrée est une seule valeur.
model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
Ensuite, écrivez le code pour compiler votre réseau de neurones. Pour ce faire, vous devez spécifier deux fonctions : loss
et optimizer
.
Dans cet exemple, vous savez que la relation entre les nombres est Y=3X+1.
Lorsque l'ordinateur tente d'apprendre cela, il réalise une estimation, peut-être Y=10X+10. La fonction loss
mesure les réponses déduites par rapport aux bonnes réponses connues et mesure ses performances.
Ensuite, le modèle utilise la fonction optimizer
pour faire une autre estimation. Le système essaie de minimiser la perte à l'aide de la fonction de perte. À ce stade, il se peut qu'elle affiche Y=5X+5, par exemple. C'est quand même bien mauvais, mais cela s'en rapproche.
Le modèle répète cette valeur pour le nombre d'époques que vous verrez bientôt.
Tout d'abord, voici comment lui indiquer d'utiliser mean_squared_error
pour la perte et la descente de gradient stochastique (sgd
) pour l'optimiseur. Vous n'avez pas encore besoin de comprendre ces notions, mais vous pouvez voir qu'elles fonctionnent !
Au fil du temps, vous découvrirez les différentes fonctions de perte et d'optimisation, adaptées à différents scénarios.
model.compile(optimizer='sgd', loss='mean_squared_error')
Fournir les données
Ensuite, alimentez les données. Dans ce cas, vous utilisez les variables X et Y plus tôt. Vous pouvez constater que la relation entre ces deux éléments est que Y=3X+1. Où X est -1, Y est -2.
Pour cela, une bibliothèque Python appelée NumPy fournit de nombreuses structures de données de type ARRAY. Spécifiez les valeurs sous forme de tableau dans NumPy avec np.array[]
.
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)
Vous disposez maintenant de tout le code nécessaire pour définir le réseau de neurones. L'étape suivante consiste à l'entraîner à déterminer les motifs entre ces nombres et à les utiliser pour créer un modèle.
4. Entraîner le réseau de neurones
Le processus d'entraînement du réseau de neurones, où il apprend la relation entre les X's et les Y's, se trouve dans l'appel model.fit
. C'est cette étape qui passe par la boucle avant de réaliser une estimation, que l'on mesure la valeur de la perte (la perte) ou la méthode de l'optimiseur pour faire une autre estimation. La opération sera effectuée pour le nombre d'époques spécifié. Lorsque vous exécutez ce code, la perte est indiquée pour chaque époque.
model.fit(xs, ys, epochs=500)
Par exemple, pendant les premières époques, la valeur de perte est assez élevée, mais elle diminue à chaque étape.
La perte diminue rapidement à mesure que la formation progresse.
Une fois l'entraînement terminé, la perte est extrêmement faible, ce qui montre que notre modèle excelle dans la relation entre les nombres.
Vous n'avez probablement pas besoin des 500 époques et pouvez tester différentes valeurs. Comme vous le voyez, la perte est minime après seulement 50 époques.
5. Utiliser le modèle
Vous avez un modèle qui a été entraîné pour apprendre la relation entre X et Y. Vous pouvez utiliser la méthode model.predict
pour qu'elle détermine le Y pour un X inconnu. Par exemple, si X est égal à 10, à quoi correspond Y ? Effectuez une estimation avant d'exécuter le code suivant:
print(model.predict([10.0]))
Vous l'aviez peut-être pensé, À votre avis, pourquoi ?
Les réseaux de neurones gèrent les probabilités. Ils ont donc calculé qu'il est très probable que la relation entre X et Y soit Y=3X+1, mais ils ne peuvent savoir avec certitude que six points de données. Le résultat est très proche de 31, mais pas forcément 31.
Lorsque vous travaillez avec des réseaux de neurones, ce schéma est récurrent. Vous traiterez presque toujours les probabilités, et non les certitudes, et vous effectuerez un peu de codage pour déterminer ce qui repose sur le résultat, en particulier en ce qui concerne la classification.
6. Félicitations
Bientôt, vous avez découvert la plupart des concepts de ML que vous utiliserez dans des scénarios bien plus complexes. Vous avez appris à entraîner un réseau de neurones à détecter la relation entre deux ensembles de nombres en définissant le réseau. Vous avez défini un ensemble de couches (dans ce cas seulement une) contenant des neurones (dans le cas présent, une seule). Vous avez ensuite compilé une fonction de perte et un optimiseur.
La collecte d'un réseau, d'une fonction de perte et d'un optimiseur gère le processus de liaison entre les nombres, la mesure de leurs performances, puis génère de nouveaux paramètres pour les nouvelles deviners. Pour en savoir plus, accédez à TensorFlow.org.
En savoir plus
Pour découvrir comment le ML et TensorFlow peuvent vous aider à développer vos modèles de vision par ordinateur, consultez Créer un modèle de vision par ordinateur avec TensorFlow.