
La connaissance de l'apprentissage automatique et de la bibliothèque TensorFlow est similaire aux premières leçons dans une école de conduite, lorsque vous souffrez de stationnement parallèle, essayez de changer de vitesse au bon moment et de ne pas mélanger les rétroviseurs, en vous souvenant frénétiquement de la séquence d'actions, tandis que votre pied tremble nerveusement sur les pédales d'accélérateur. C'est un exercice difficile mais nécessaire. Donc dans le machine learning: avant d'utiliser des systèmes de reconnaissance faciale modernes ou des algorithmes de prévision en bourse, vous devrez vous occuper des outils appropriés et d'un ensemble d'instructions afin de créer ensuite vos propres systèmes sans problème.
Les débutants en apprentissage automatique apprécieront l'orientation appliquée de ce livre, car son objectif est d'introduire les bases, puis de passer rapidement à la résolution de problèmes réels. À partir d'un examen des concepts et des principes de l'apprentissage automatique du travail avec TensorFlow, vous passerez à des algorithmes de base, étudier des réseaux de neurones et être en mesure de résoudre indépendamment les problèmes de classification, de clustering, de régression et de prévision.
Extrait. Réseaux de neurones convolutifs
Faire du shopping dans les magasins après une journée exténuante est une tâche très onéreuse. Mes yeux sont attaqués par trop d'informations. Ventes, coupons, une variété de couleurs, petits enfants, lumières vacillantes et allées remplies de gens - ce ne sont que quelques exemples de tous les signaux qui sont envoyés au cortex visuel du cerveau, que je veuille ou non y prêter attention. Le système visuel absorbe une abondance d'informations.
Vous connaissez sûrement la phrase «il vaut mieux voir une fois que d’entendre cent fois». Cela peut être vrai pour vous et pour moi (c'est-à-dire pour les gens), mais la machine peut-elle trouver un sens aux images? Nos photorécepteurs visuels sélectionnent les longueurs d'onde de la lumière, mais cette information, apparemment, ne s'étend pas à notre conscience. En fin de compte, je ne peux pas dire exactement quelles longueurs d'onde de lumière j'observe. De la même manière, la caméra reçoit des pixels d'image. Mais nous voulons plutôt recevoir quelque chose d'un niveau supérieur, par exemple des noms ou des positions d'objets. Comment obtenir des informations perçues au niveau humain à partir des pixels?
Pour obtenir une certaine signification à partir des données sources, il sera nécessaire de concevoir un modèle de réseau neuronal. Dans les chapitres précédents, plusieurs types de modèles de réseaux de neurones ont été introduits, tels que les modèles entièrement connectés (chapitre 8) et les auto-encodeurs (chapitre 7). Dans ce chapitre, nous présenterons un autre type de modèle appelé réseau neuronal convolutif (CNN). Ce modèle fonctionne très bien avec des images et d'autres données sensorielles telles que le son. Par exemple, le modèle CNN peut classer de manière fiable quel objet est affiché dans l'image.
Le modèle CNN, qui sera abordé dans ce chapitre, sera formé pour classer les images dans l'une des 10 catégories possibles. Dans ce cas, «une image vaut mieux qu'un seul mot», car nous n'avons que 10 options possibles. C'est un petit pas vers la perception au niveau humain, mais nous devons commencer par quelque chose, non?
9.1. Inconvénients des réseaux de neurones
L'apprentissage automatique est une lutte éternelle pour le développement d'un modèle qui aurait une expressivité suffisante pour présenter des données, mais en même temps pas si universel qu'il s'agit de recycler et de mémoriser des modèles. Les réseaux de neurones sont proposés comme un moyen d'augmenter l'expressivité; bien que, comme vous pouvez le deviner, ils souffrent grandement des pièges de la reconversion.
REMARQUE Le recyclage se produit lorsqu'un modèle entraîné est exceptionnellement précis sur un ensemble de données d'apprentissage et mauvais sur un ensemble de données de validation. Ce modèle est probablement trop universel pour la petite quantité de données disponibles, et au final, il se souvient simplement des données de formation.
Pour comparer la polyvalence des deux modèles d'apprentissage automatique, vous pouvez utiliser un algorithme heuristique rapide et grossier pour calculer le nombre de paramètres qui doivent être déterminés à la suite de la formation. Comme le montre la fig. 9.1, un réseau de neurones entièrement connecté qui prend une image 256 × 256 et la mappe sur une couche de 10 neurones aura 256 × 256 × 10 = 655 360 paramètres! Comparez-le avec un modèle contenant seulement cinq paramètres. On peut supposer qu'un réseau de neurones entièrement connecté peut présenter des données plus complexes qu'un modèle à cinq paramètres.
La section suivante traite des réseaux de neurones convolutifs, qui sont un moyen raisonnable de réduire le nombre de paramètres. Au lieu de traiter avec des réseaux entièrement connectés, CNN réutilise les mêmes paramètres à plusieurs reprises.
9.2. Réseaux de neurones convolutifs
L'idée principale sous-jacente aux réseaux de neurones convolutifs est que la compréhension locale de l'image est suffisante. L'avantage pratique des réseaux de neurones convolutifs est que, ayant plusieurs paramètres, il est possible de réduire considérablement le temps de formation, ainsi que la quantité de données nécessaires pour former le modèle.
Au lieu de réseaux entièrement connectés avec des poids de chaque pixel, CNN a un nombre suffisant de poids nécessaires pour visualiser un petit fragment de l'image. C'est comme lire un livre avec une loupe: à la fin, vous lisez la page entière, mais à tout moment, n'en regardez qu'un petit fragment.
Imaginez une image 256 × 256. Au lieu d'utiliser le code TensorFlow qui traite l'image entière à la fois, vous pouvez numériser l'image fragment par fragment, disons, une fenêtre 5 × 5. Une fenêtre 5 × 5 glisse sur l'image (généralement de gauche à droite et de haut en bas), comme montré dans la fig. 9.2. La vitesse à laquelle il glisse est appelée longueur de foulée. Par exemple, une longueur de pas de 2 signifie qu'une fenêtre coulissante 5 × 5 déplace 2 pixels à la fois jusqu'à ce que l'image entière soit passée. Dans TensorFlow, comme nous le verrons bientôt, vous pouvez ajuster la longueur de pas et la taille de la fenêtre à l'aide de la bibliothèque de fonctions intégrée.
Cette fenêtre 5 × 5 a une matrice de poids 5 × 5 qui lui est associée.
DÉFINITION Une convolution est une somme pondérée des valeurs d'intensité des pixels d'une image lorsque la fenêtre traverse l'image entière. Il s'avère que ce processus de convolution de l'image avec la matrice de poids crée une autre image (de même taille, qui dépend du pliage). La coagulation est le processus d'application de la convolution.
Toutes les manipulations de la fenêtre glissante se produisent dans la couche convolutionnelle du réseau neuronal. Un réseau neuronal convolutif typique comporte plusieurs couches convolutives. Chaque couche convolutionnelle crée généralement de nombreuses convolutions supplémentaires, donc la matrice de pondération est un tenseur 5 × 5 × n, où n est le nombre de convolutions.
Par exemple, laissez l'image passer à travers une couche convolutionnelle avec une matrice de poids de dimensions 5 × 5 × 64. Cela crée 64 convolutions avec une fenêtre coulissante 5 × 5. Par conséquent, le modèle correspondant a 5 × 5 × 64 = 1600 paramètres, ce qui est nettement inférieur au nombre de paramètres d'un réseau entièrement connecté. : 256 × 256 = 65 536.
L'attractivité des réseaux de neurones convolutifs (CNN) est que le nombre de paramètres utilisés par le modèle ne dépend pas de la taille de l'image d'origine. Vous pouvez exécuter le même réseau neuronal convolutionnel sur des images 300 × 300, et le nombre de paramètres dans la couche convolutionnelle ne changera pas!
9.3. Préparation d'image
Avant de commencer à utiliser le modèle CNN avec TensorFlow, préparez quelques images. Les listes de cette section vous aideront à configurer un ensemble de données de formation pour le reste du chapitre.
Tout d'abord, téléchargez l'
ensemble de
données CIFAR-10 sur
www.cs.toronto.edu/~kriz/cifar-10- python.tar.gz. Cet ensemble contient 60 000 images réparties uniformément sur 10 catégories, ce qui est une ressource assez importante pour les tâches de classification. Ensuite, le fichier image doit être placé dans le répertoire de travail. Dans la fig. La figure 9.3 montre des exemples d'images de cet ensemble de données.
Nous avons déjà utilisé l'ensemble de données CIFAR-10 dans le chapitre précédent sur les auto-encodeurs, et examinons à nouveau ce code. La liste suivante est tirée directement de la documentation CIFAR-10 située à
www.cs.toronto.edu/~kriz/cifar.html . Placez le code dans le fichier cifar_tools.py.
Listing 9.1. Chargement d'images à partir d'un fichier CIFAR-10 en Python
import pickle def unpickle(file): fo = open(file, 'rb') dict = pickle.load(fo, encoding='latin1') fo.close() return dict
Les réseaux de neurones ont tendance à se recycler, il est donc important de faire tout ce qui est possible pour minimiser cette erreur. Pour ce faire, n'oubliez pas de nettoyer les données avant de les traiter.
Le nettoyage des données est le processus principal du pipeline d'apprentissage automatique. Le code du Listing 9.2 utilise les trois étapes suivantes pour nettoyer un ensemble d'images:
1. Si vous avez une image en couleur, essayez de la convertir en nuances de gris pour réduire la dimensionnalité des données d'entrée et, par conséquent, réduire le nombre de paramètres.
2. Pensez à recadrer l'image au centre, car les bords de l'image ne fournissent aucune information utile.
3. Normalisez l'entrée en soustrayant la moyenne et en divisant par l'écart-type de chaque échantillon de données afin que les gradients ne changent pas trop fortement pendant la propagation arrière.
La liste suivante montre comment effacer un jeu de données à l'aide de ces méthodes.
Enregistrez toutes les images de l'ensemble de données CIFAR-10 et exécutez la fonction de nettoyage. La liste suivante définit une méthode pratique pour lire, nettoyer et structurer les données à utiliser dans TensorFlow. Là, vous devez inclure le code du fichier cifar_tools.py.
Listing 9.3. Prétraitement de tous les fichiers CIFAR-10
def read_data(directory): names = unpickle('{}/batches.meta'.format(directory))['label_names'] print('names', names) data, labels = [], [] for i in range(1, 6): filename = '{}/data_batch_{}'.format(directory, i) batch_data = unpickle(filename) if len(data) > 0: data = np.vstack((data, batch_data['data'])) labels = np.hstack((labels, batch_data['labels'])) else: data = batch_data['data'] labels = batch_data['labels'] print(np.shape(data), np.shape(labels)) data = clean(data) data = data.astype(np.float32) return names, data, labels
Dans le fichier using_cifar.py, vous pouvez utiliser la méthode en important cifar_tools pour cela. Les listes 9.4 et 9.5 montrent comment extraire plusieurs images d'un ensemble de données et les visualiser.
Listing 9.4. Utilisation de la fonction d'assistance cifar_tools
import cifar_tools names, data, labels = \ cifar_tools.read_data('your/location/to/cifar-10-batches-py')
Vous pouvez sélectionner arbitrairement plusieurs images et les dessiner en fonction de l'étiquette. La liste suivante fait exactement cela, afin que vous puissiez mieux comprendre le type de données que vous allez traiter.
En exécutant ce code, vous créerez le fichier cifar_examples.png, qui ressemblera à la Fig. 9.3.
»Plus d'informations sur le livre sont disponibles sur
le site de l'éditeur»
Contenu»
Extrait20% de réduction sur les colporteurs -
Machine Learning