Site icon Blog Zenika

Deep Learning : Back to Basics

On n’a jamais autant entendu parler de l’intelligence artificielle (IA) que ces 10 dernières années. L’IA washing est très répandue, au point où il est devenu facile de confondre IA, Deep Learning et réseaux de neurones.
Dans cet article, nous allons éclaircir ces trois termes. Ensuite, nous allons implémenter le premier réseau de neurones de l’histoire à savoir le `perceptron`, en utilisant `TensorFlow`. Nous entraînerons notre perceptron à simuler les problèmes logiques, le OU par exemple. Pour finir, nous allons exposer nos modèles de réseau de neurones via une application `Rest` développée en `Node.JS` et interfacée par un client en `React.JS` pour l’affichage. Le choix de ces technos est motivé par une volonté de décloisonner les univers, en collaborant avec des devs front. Cette dernière partie est écrite en collaboration avec mon collègue Joan Anagbla.

IA – Deep Learning – Réseaux de neurones

L’intelligence artificielle est un ensemble de techniques permettant de simuler l’intelligence humaine. Elle est née dans les années 50.

source
Il y a plusieurs branches dans l’I.A. (liste non exhaustive) :

def model(_model_):
   [...]
   else :
       with tf.variable_scope(_model_+"layer1", reuse = tf.AUTO_REUSE):
           z0 = CreateOneLayer(X, 2)
       with tf.variable_scope(_model_+"layer2", reuse = tf.AUTO_REUSE):
           model = CreateOneLayer(z0, 1)
   return model

Une fois ce modèle entraîné au bout de 500 itérations :

Mise en production des modèles

TensorFlow vient avec la suite TensorServing qui permet de mettre en production des modèles construits avec TensorFlow. Ce sujet fera l’objet d’un prochain article.
Le back-end de notre application est principalement composé des 4 modèles sauvegardés, ainsi que de la fonction qui permet d’effectuer la prédiction

def predict_single(x1, x2, _model_) :
   z0 = model()
   saver = tf.train.Saver()
   saver.restore(sess, "./models/"+_model_+".ckpt")
   X_in = np.array([x1, x2]).reshape([-1, 2])
   pred = sess.run(z0, feed_dict={X: X_in})
   result = np.int(np.round(np.reshape(pred, 1)[0]))
   return result

Pour pouvoir exploiter notre modèle, nous allons maintenant le déployer sur un serveur et afficher le résultat des prédictions à l’aide d’une page web.

Exposition du modèle

La création d’un serveur Node.JS se fait à l’aide de commandes linux. Dans un terminal, il faut initier un nouveau projet Node.JS (`npm init`) et renseigner les informations demandées (nom du projet, etc.). On copie le répertoire des modèles à l’intérieur du projet initié. On utilise ensuite
PythonShell pour lancer l’exécution de la prédiction `(script python)` depuis un script `JavaScript`:

PythonShell.run("predict.py", options, function (err, result) {
   if (err) {
     res.send(err); //Retourne une erreur en cas d'erreur
   }
   else {
     res.send(result); //Expose le résultat grâce à la fonction callback de express (res.send)
   }
 });

Enfin, on expose le résultat sur le web grâce à une Api Rest (créée avec Express).

Affichage du résultat


Pour créer la page web chargée de contacter le serveur et d’afficher le résultat des prédictions, nous avons fait le choix de React.JS. React est un framework créé par Facebook permettant de développer des applications web. En plus de React nous avons utilisé une bibliothèque de composants Material-UI. Pour que l’application web puisse contacter le serveur nous avons eu recours à la bibliothèque axios.
Félicitation… Vous venez de mettre en production votre premier modèle de Deep Learning.
Tous les codes de cet article sont disponibles sur mon github. PR vivement recommandée (et souhaitée :-P).

Auteur/Autrice

Quitter la version mobile