Le livre "Deep Learning on R"

image Le deep learning est un ensemble d'algorithmes d'apprentissage automatique qui modélisent les abstractions de haut niveau dans les données à l'aide d'architectures composées de nombreuses transformations non linéaires. D'accord, cette phrase semble menaçante. Mais tout n'est pas si effrayant si François Schollay, qui a créé Keras, la bibliothèque la plus puissante pour travailler avec les réseaux de neurones, parle d'apprentissage en profondeur. Faites l'expérience d'un apprentissage approfondi avec des exemples pratiques provenant d'une grande variété de domaines. Le livre est divisé en deux parties, la première donne les fondements théoriques, la seconde est consacrée à la résolution de problèmes spécifiques. Cela vous permettra non seulement de comprendre les bases de DL, mais également d'apprendre à utiliser de nouvelles opportunités dans la pratique. Ce livre est écrit pour les personnes ayant une expérience en programmation R qui souhaitent se familiariser rapidement avec le deep learning dans la pratique, et est un arrangement du livre le plus vendu de François Scholl, «Deep Learning in Python», mais en utilisant des exemples basés sur l'interface R pour Keras.

Ă€ propos de ce livre


Le livre "Deep Learning on R" s'adresse aux statisticiens, analystes, ingénieurs et étudiants qui ont des compétences en programmation en R, mais n'ont pas de connaissances significatives dans le domaine de la machine et du deep learning. Ce livre est une version révisée d'un livre précédent, Deep Learning in Python , contenant des exemples qui utilisent l'interface R pour Keras. Le but de ce livre est de donner à la communauté R un guide qui contient tout ce dont vous avez besoin, de la théorie de base aux applications pratiques avancées. Vous verrez plus de 30 exemples de code de programme avec des commentaires détaillés, des recommandations pratiques et des explications générales simples de tout ce que vous devez savoir pour utiliser l'apprentissage en profondeur dans la résolution de problèmes spécifiques.

Les exemples utilisent le framework d'apprentissage profond Keras et la bibliothèque TensorFlow comme mécanisme interne. Keras est l'un des frameworks d'apprentissage en profondeur les plus populaires et les plus dynamiques. Il est souvent recommandé comme l'outil le plus efficace pour les débutants pour l'apprentissage en profondeur. Après avoir lu ce livre, vous comprendrez ce qu'est l'apprentissage en profondeur, pour résoudre les problèmes dans lesquels cette technologie peut être impliquée et ses limites. Vous en apprendrez plus sur le processus standard d'interprétation et de résolution des problèmes d'apprentissage automatique et sur la façon de traiter les problèmes courants. Vous apprendrez à utiliser Keras pour résoudre des problèmes pratiques, de la reconnaissance des formes au traitement du langage naturel: classification des images, prédiction des séquences temporelles, analyse des émotions et génération d'images et de texte et bien plus encore.

Extrait. 5.4.1. Visualisation d'activation intermédiaire


La visualisation des activations intermédiaires consiste à afficher des cartes d'entités qui sont affichées par différents niveaux convolutionnels et combinant dans le réseau en réponse à certaines données d'entrée (sortie du niveau, résultat de la fonction d'activation, souvent appelée son activation). Cette technique vous permet de voir comment les données d'entrée sont décomposées en divers filtres reçus par le réseau dans le processus d'apprentissage. En règle générale, des cartes d'entités à trois dimensions sont utilisées pour la visualisation: largeur, hauteur et profondeur (canaux de couleur). Les canaux codent des entités relativement indépendantes. Par conséquent, pour visualiser ces cartes d'entités, il est préférable de créer des images bidimensionnelles pour chaque canal séparément. Nous commençons par charger le modèle stocké dans la section 5.2:

> library(keras) > model <- load_model_hdf5("cats_and_dogs_small_2.h5") > model________________________________________________________________ Layer (type) Output Shape Param # ============================================================== conv2d_5 (Conv2D) (None, 148, 148, 32) 896 ________________________________________________________________ maxpooling2d_5 (MaxPooling2D) (None, 74, 74, 32) 0 ________________________________________________________________ conv2d_6 (Conv2D) (None, 72, 72, 64) 18496 ________________________________________________________________ maxpooling2d_6 (MaxPooling2D) (None, 36, 36, 64) 0 ________________________________________________________________ conv2d_7 (Conv2D) (None, 34, 34, 128) 73856 ________________________________________________________________ maxpooling2d_7 (MaxPooling2D) (None, 17, 17, 128) 0 ________________________________________________________________ conv2d_8 (Conv2D) (None, 15, 15, 128) 147584 ________________________________________________________________ maxpooling2d_8 (MaxPooling2D) (None, 7, 7, 128) 0 ________________________________________________________________ flatten_2 (Flatten) (None, 6272) 0 ________________________________________________________________ dropout_1 (Dropout) (None, 6272) 0 ________________________________________________________________ dense_3 (Dense) (None, 512) 3211776 ________________________________________________________________ dense_4 (Dense) (None, 1) 513 ================================================================ Total params: 3,453,121 Trainable params: 3,453,121 Non-trainable params: 0 

Ensuite, sélectionnez une image d'entrée d'un chat qui ne fait pas partie de l'ensemble d'entraînement.

image

Listing 5.25. Test de l'affichage de l'image

 plot(as.raster(img_tensor[1,,,])) 

Pour extraire les cartes d'entités à visualiser, créez un modèle Keras qui accepte les paquets d'images et affiche l'activation de tous les niveaux convolutionnels et combinatoires. Pour ce faire, utilisez la fonction keras_model du framework Keras, qui prend deux arguments: le tenseur d'entrée (ou liste des tenseurs d'entrée) et le tenseur de sortie (ou liste des tenseurs de sortie). Le résultat sera un objet de modèle Keras similaire aux modèles renvoyés par la fonction keras_sequential_model () que vous connaissez déjà; ce modèle mappe une entrée donnée à une sortie donnée. Modèles d'entités
Ce type est la possibilité de créer des modèles avec plusieurs sorties (par opposition à keras_sequential_model ()). La fonction keras_model est discutée plus en détail dans la section 7.1.

image

image

Si vous transmettez une image à ce modèle, elle renverra les valeurs d'activation de la couche dans le modèle d'origine. C'est le premier exemple d'un modèle avec plusieurs sorties dans ce livre: jusqu'à présent, tous les modèles présentés ci-dessus ont exactement une entrée et une sortie. En général, un modèle peut avoir un nombre quelconque d'entrées et de sorties. En particulier, ce modèle a une entrée et huit sorties: une pour chaque activation de niveau.

image

Prenons par exemple l'activation de la première couche convolutionnelle pour l'image d'entrée d'un chat:

 > first_layer_activation <- activations[[1]] > dim(first_layer_activation) [1] 1 148 148 32 

Il s'agit d'une carte de fonction de 148 × 148 avec 32 canaux. Essayons d'en afficher certains. Tout d'abord, nous définissons une fonction pour visualiser le canal.

Listing 5.28. Fonction de visualisation des canaux

 plot_channel <- function(channel) { rotate <- function(x) t(apply(x, 2, rev)) image(rotate(channel), axes = FALSE, asp = 1, col = terrain.colors(12)) } 

Nous allons maintenant afficher le deuxième canal d'activation du premier niveau du modèle d'origine (Fig. 5.18). Ce canal semble représenter un détecteur de boucle.
Listing 5.29. Visualisation du canal 2

 plot_channel(first_layer_activation[1,,,2]) 

Examinons maintenant le septième canal (Fig. 5.19), mais gardez à l'esprit que vos canaux peuvent être différents, car l'apprentissage de filtres spécifiques n'est pas une opération déterministe. Ce canal est un peu différent et on dirait qu'il met en valeur l'iris du chat.
Listing 5.30. Visualisation du canal 7

 plot_channel(first_layer_activation[1,,,7]) 

image

Nous allons maintenant construire une visualisation complète de toutes les activations sur le réseau (extrait 5.31). Pour ce faire, extrayez et affichez chaque canal dans les huit cartes d'activation, en plaçant les résultats dans un tenseur plus grand avec des images (Fig. 5.20–5.23).

Listing 5.31. Visualisation de tous les canaux pour toutes les activations intermédiaires

 image_size <- 58 images_per_row <- 16 for (i in 1:8) { layer_activation <- activations[[i]] layer_name <- model$layers[[i]]$name n_features <- dim(layer_activation)[[4]] n_cols <- n_features %/% images_per_row png(paste0("cat_activations_", i, "_", layer_name, ".png"), width = image_size * images_per_row, height = image_size * n_cols) op <- par(mfrow = c(n_cols, images_per_row), mai = rep_len(0.02, 4)) for (col in 0:(n_cols-1)) { for (row in 0:(images_per_row-1)) { channel_image <- layer_activation[1,,,(col*images_per_row) + row + 1] plot_channel(channel_image) } } par(op) dev.off() } 

image

image

Voici quelques commentaires sur les résultats.

  • La première couche agit comme une collection de diffĂ©rents dĂ©tecteurs de boucle. Ă€ ce stade, l'activation enregistre presque toutes les informations disponibles dans l'image d'origine.
  • Lorsque vous montez les couches d'activation, elles deviennent plus abstraites et leur interprĂ©tation visuelle devient plus complexe. Ils commencent Ă  coder des concepts de haut niveau tels que «l'oreille du chat» ou «l'Ĺ“il du chat». Les reprĂ©sentations de haut niveau vĂ©hiculent de moins en moins d'informations sur l'image originale et de plus en plus sur la classe de l'image.
  • La raretĂ© des activations augmente avec la profondeur de la couche: dans la première couche, tous les filtres sont activĂ©s par l'image d'origine, mais dans les couches suivantes, il y a de plus en plus de filtres vides. Cela signifie que le motif correspondant au filtre est introuvable dans l'image d'origine.

Nous venons d'examiner une caractéristique universelle importante des représentations créées par les réseaux de neurones profonds: les entités extraites par les couches deviennent plus abstraites avec la profondeur des couches. Les activations sur les couches supérieures contiennent de moins en moins d'informations sur une image d'entrée particulière, et de plus en plus sur la cible (dans ce cas, la classe d'image est un chat ou un chien). Un réseau neuronal profond agit en fait comme un pipeline pour nettoyer les informations, qui reçoit des données brutes (dans ce cas, des images au format RVB) et subit de multiples transformations, filtrant les informations inutiles (par exemple, l'apparence spécifique de l'image) et laissant et nettoyant la bonne (par exemple, une classe images).

De la même manière, les gens et les animaux perçoivent le monde qui les entoure: après avoir observé une scène pendant plusieurs secondes, une personne se souvient des objets abstraits qui y sont présents (un vélo, un arbre), mais ne se souvient pas de tous les détails de l'apparence de ces objets. En fait, lorsque vous essayez de dessiner un vélo de mémoire, vous ne pourrez probablement pas obtenir une image plus ou moins correcte, même si vous pouvez voir les vélos des milliers de fois (voir les exemples de la figure 5.24). Essayez de le faire dès maintenant et vous serez convaincu de la vérité de ce qui a été dit. Votre cerveau a appris à abstraire complètement l'image visible reçue à l'entrée et à la convertir en concepts visuels de haut niveau, tout en filtrant les détails visuels sans importance, ce qui rend la mémorisation difficile.

image


»Plus d'informations sur le livre sont disponibles sur le site Web de l'éditeur
» Contenu
» Extrait

20% de réduction sur les colporteurs - Deep Learning avec R

Source: https://habr.com/ru/post/fr421769/


All Articles