Début avec TensorFlow

Début avec TensorFlow
Tensorflow est le cerveau de Google et à la base, c'est une bibliothèque pour le calcul numérique. Il est écrit en C / C ++ et possède une API très flexible. Cette API peut être interfacée avec un frontal Python afin que vous puissiez écrire de petits extraits de code Python pour résoudre des problèmes compliqués. Une API flexible et cohérente permet également aux développeurs d'utiliser le même code frontal pour s'exécuter sur diverses plates-formes telles que les GPU NVIDIA, les CPU à usage général et même les appareils mobiles et embarqués dont chacun a une implémentation très différente dans le back-end.

Tensorflow a trouvé une immense utilisation dans le domaine de l'apprentissage automatique, précisément parce que l'apprentissage automatique implique beaucoup de nombres et est utilisé comme technique de résolution de problèmes généralisés. Et bien que nous interagirons avec lui en utilisant Python, il a frontal pour d'autres langues comme Go, nœud.JS et même C #.

Tensorflow est comme une boîte noire qui cache toutes les subtilités mathématiques à l'intérieur et le développeur appelle simplement les bonnes fonctions pour résoudre un problème. Mais quel problème?

Apprentissage automatique (ML)

Supposons que vous concevez un bot pour jouer à un jeu d'échecs. En raison de la façon dont les échecs sont conçus, la façon dont les pièces se déplacent et l'objectif bien défini du jeu, il est tout à fait possible d'écrire un programme qui jouerait extrêmement bien le jeu. En fait, cela déjouerait toute la race humaine dans les échecs. Il saurait exactement quel mouvement il a besoin pour faire de l'état de toutes les pièces du tableau.

Cependant, un tel programme ne peut que jouer aux échecs. Les règles du jeu sont cuites dans la logique du code et tout ce que le programme fait est d'exécuter cette logique rigoureusement et plus précisément que n'importe quel humain. Ce n'est pas un algorithme à usage général que vous pouvez utiliser pour concevoir n'importe quel bot de jeu.

Avec l'apprentissage automatique, les changements de paradigme et les algorithmes deviennent de plus en plus généraux.

L'idée est simple, elle commence par définir un problème de classification. Par exemple, vous souhaitez automatiser le processus d'identification des espèces d'araignées. Les espèces qui vous sont connues sont les différentes classes (à ne pas confondre avec les classes taxonomiques) et l'objectif de l'algorithme est de trier une nouvelle image inconnue dans l'une de ces classes.

Ici, la première étape pour l'humain serait de déterminer les caractéristiques de diverses araignées individuelles. Nous fournissons des données sur la longueur, la largeur, la masse corporelle et la couleur des araignées individuelles ainsi que les espèces auxquelles ils appartiennent:

Longueur Largeur Masse Couleur Texture Espèces
5 3 12 Brun lisse Papa longues jambes
dix 8 28 Marron noir poilu Tarentule

Le fait d'avoir une grande collection de ces données d'araignées individuelles sera utilisée pour `` former '' l'algorithme et un autre ensemble de données similaires seront utilisés pour tester l'algorithme afin de voir à quel point il se comporte sur de nouvelles informations qu'il n'a jamais rencontrées auparavant, mais que nous connaissons déjà le Réponds à.

L'algorithme commencera de manière randomisée. C'est-à-dire que chaque araignée quelles que soient ses caractéristiques serait classée comme n'importe qui de l'espèce. S'il y a 10 espèces différentes dans notre ensemble de données, alors cet algorithme naïf recevrait la classification correcte environ 1 / 10e du temps en raison de la fourchette.

Mais alors l'aspect d'apprentissage de la machine commencerait à prendre le relais. Il commencerait à associer certaines fonctionnalités à certains résultats. Par exemple, les araignées poilues sont susceptibles d'être des tarentules, tout comme les plus grandes araignées. Ainsi, chaque fois qu'une nouvelle araignée qui est grande et poilue apparaît, elle se verra attribuer une plus grande probabilité d'être tarentule. Remarquez, nous travaillons toujours avec des probabilités, c'est parce que nous travaillons intrinsèquement avec un algorithme probabiliste.

La partie d'apprentissage fonctionne en modifiant les probabilités. Initialement, l'algorithme commence par attribuer au hasard une «espèce» à des individus en faisant des corrélations aléatoires comme, être «poilues» et être des «jambes de papa». Quand il fait une telle corrélation et que l'ensemble de données de formation ne semble pas être d'accord, cette hypothèse est abandonnée.

De même, lorsqu'une corrélation fonctionne bien à travers plusieurs exemples, il devient plus fort à chaque fois. Cette méthode de trébuchement vers la vérité est remarquablement efficace, grâce à beaucoup de subtilités mathématiques qui, en tant que débutant, vous ne voudriez pas vous inquiéter.

Tensorflow et formation de votre propre classificateur de fleurs

Tensorflow prend encore plus loin l'idée de l'apprentissage automatique. Dans l'exemple ci-dessus, vous étiez chargé de déterminer les caractéristiques qui distinguent une espèce d'araignée d'un autre. Nous avons dû mesurer les araignées individuelles minutieusement et créer des centaines de ces enregistrements.

Mais nous pouvons faire mieux, en fournissant juste des données d'image brutes à l'algorithme, nous pouvons laisser l'algorithme trouver des modèles et comprendre diverses choses sur l'image comme la reconnaissance des formes de l'image, puis comprendre quelle est la texture des différentes surfaces, la couleur , etc., etc. C'est la notion débutante de vision par ordinateur et vous pouvez également l'utiliser pour d'autres types d'entrées, comme les signaux audio et la formation de votre algorithme pour la reconnaissance vocale. Tout cela relève du terme parapluie de «Deep Learning» où l'apprentissage automatique est pris à son extrême logique.

Cet ensemble de notions généralisés peut alors être spécialisé lorsqu'il s'agit de nombreuses images de fleurs et de les catégoriser.

Dans l'exemple ci-dessous, nous utiliserons un python2.7 Front-end pour interface avec TensorFlow et nous utiliserons PIP (pas PIP3) pour installer TensorFlow. Le support Python 3 est encore un peu buggy.

Pour faire votre propre classificateur d'images, en utilisant d'abord TensorFlow, installons-le en utilisant pépin:

$ pip install tensorflow

Ensuite, nous devons cloner le Tensorflow-pour-poètes-2 référentiel GIT. C'est un très bon point de départ pour deux raisons:

  1. C'est simple et facile à utiliser
  2. Il est pré-formé dans une certaine mesure. Par exemple, le classificateur de fleurs est déjà formé pour comprendre quelle texture il regarde et quelles formes il regarde, il est donc moins intensif par calcul.

Obtenons le référentiel:

$ git clone https: // github.com / googlecodelabs / tensorflow-pour-poètes-2
$ cd tensorflow-for-pots-2

Ce sera notre répertoire de travail, donc toutes les commandes devraient être émises à partir de l'intérieur, à partir de maintenant.

Nous devons encore former l'algorithme pour le problème spécifique de la reconnaissance des fleurs, car nous avons besoin de données de formation, alors obtenons cela:

$ curl http: // télécharger.tensorflow.org / example_images / flower_photos.tgz
| TAR XZ -C TF_FILES

Le répertoire… ./ /Tensorflow-for-pots-2 / tf_files contient une tonne de ces images correctement étiquetées et prêtes à être utilisées. Les images seront à deux fins différentes:

  1. Formation du programme ML
  2. Tester le programme ML

Vous pouvez vérifier le contenu du dossier tf_files Et ici, vous constaterez que nous restons à seulement 5 catégories de fleurs, à savoir les marguerites, les tulipes, les tournesols, le pissenlit et les roses.

Former le modèle

Vous pouvez démarrer le processus de formation en mettant d'abord les constantes suivantes pour redimensionner toutes les images d'entrée dans une taille standard et en utilisant une architecture mobilenet légère:

$ Image_size = 224
$ Architecture = "mobilenet_0.50 _ $ image_size "

Invoquez ensuite le script Python en exécutant la commande:

$ python -m scripts.recounse \
--Bottleneck_dir = tf_files / goulot d'étranglement \
--how_many_training_steps = 500 \
--modèle_dir = tf_files / modèles / \
--résumés_dir = tf_files / formation_summaries / "$ architecture" \
--output_graph = tf_files / retentiel_graph.pb \
--output_labels = tf_files / retentiel_labels.SMS \
--architecture = "$ architecture" \
--image_dir = tf_files / flower_photos

Bien qu'il existe de nombreuses options spécifiées ici, la plupart d'entre elles spécifient vos répertoires de données d'entrée et le nombre d'itération, ainsi que les fichiers de sortie où les informations sur le nouveau modèle seraient stockées. Cela ne devrait pas prendre plus de 20 minutes pour courir sur un ordinateur portable médiocre.

Une fois le script terminé à la fois la formation et les tests, cela vous donnera une estimation de précision du modèle formé, qui dans notre cas était légèrement supérieur à 90%.

Utilisation du modèle formé

Vous êtes maintenant prêt à utiliser ce modèle pour la reconnaissance d'image de toute nouvelle image d'une fleur. Nous utiliserons cette image:

Le visage du tournesol est à peine visible et c'est un grand défi pour notre modèle:

Pour obtenir cette image de Wikimedia Commons, utilisez WGET:

$ wget https: // télécharger.wikimedia.org / wikipedia / commons / 2/28 / Sunflower_head_2011_g1.jpg
$ mv sunflower_head_2011_g1.jpg tf_files / inconnu.jpg

Il est sauvé comme inconnu.jpg sous le tf_files sous-répertoire.

Maintenant, pour le moment de la vérité, nous verrons ce que notre modèle a à dire sur cette image.Pour ce faire, nous invoquons le label_image scénario:

$ python -m scripts.label_image --graph = tf_files / retentiage_graphe.PB --
image = tf_files / inconnu.jpg

Vous obtiendrez une sortie similaire à ceci:

Les nombres à côté du type de fleur représentent la probabilité que notre image inconnue appartient à cette catégorie. Par exemple, c'est 98.04% certain que l'image est d'un tournesol et il n'est que 1.37% de chances que ce soit une rose.

Conclusion

Même avec des ressources informatiques très médiocres, nous constatons une précision stupéfiante pour identifier les images. Cela démontre clairement la puissance et la flexibilité de Tensorflow.

À partir de là, vous pouvez commencer à expérimenter divers autres types d'entrées ou essayer de commencer à écrire votre propre application différente à l'aide de Python et Tensorflow. Si vous voulez connaître un peu mieux le fonctionnement interne de l'apprentissage automatique, voici un moyen interactif pour vous de le faire.