Découvrez l'univers du machine learning

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.

cc3628d9a1547597.png

if(speed<4){
  status=WALKING;
}

Vous pouvez l'étendre à une autre condition.

f2cc3929221107b8.png

if(speed<4){
    status=WALKING;
} else {
    status=RUNNING;
}

Dans une dernière condition, vous pouvez également détecter le cyclisme.

Aeb282cf03d5cff.png

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é.

fc772abb6fee2804.png

// 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:

C72f871306134e45.png

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.

9b85a337ee816e1b.png

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:

556697a85931f4.png

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:

53ff9e2cb511936e.png

Considérez ce résultat comme un modèle utilisé comme suit au moment de l'exécution:

693430bb4d7fa003.png

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.

F110D5Abed07c1b9.png

La perte diminue rapidement à mesure que la formation progresse.

81ca5e71298b414b.png

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.

12B187014b639fd.png

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.