[PYTHON] Comment dessiner facilement la structure d'un réseau de neurones sur Google Colaboratory à l'aide de "convnet-tiroir"

nn-draw.png

Qu'est-ce que "convnet-tiroir"?

C'est un logiciel qui visualise la structure du réseau neuronal créé par @ yu4u d'une manière agréable. Je savais que cela existait depuis longtemps, mais je ne l'avais pas encore essayé, alors je l'ai essayé. Cela faisait du bien de l'exécuter sur Google Colaboratory (Google Colab), j'ai donc créé un ordinateur portable que je pourrais facilement essayer.

Veuillez vous reporter à l'article de blog suivant pour obtenir des explications sur Google Colab.

Si vous utilisez Google Colaboratory, vous n'avez pas besoin de créer un environnement et vous pouvez apprendre Python gratuitement.

Comment dessiner la structure d'un réseau de neurones

De là, je vais vous présenter comment dessiner un réseau de neurones en utilisant "convnet-tiroir" sur Google Colab.

Les informations auxquelles j'ai fait référence sont le code du logiciel @ yu4u et l'article suivant.

La définition d'un réseau neuronal convolutif comme Keras a créé un outil qui enregistre les diagrammes architecturaux dans PowerPoint

Vous trouverez ci-dessous un lien vers le bloc-notes Google Colab que j'ai créé. convnet_drawer_on_google_colab.ipynb

Si vous faites ce qui précède, vous le comprendrez, mais je vais vous l'expliquer brièvement. Après cela, il est supposé être exécuté sur Google Colab.

Il existe deux manières principales de dessiner un réseau neuronal: 2.

--Comment créer un modèle à partir de 0 --Comment charger un modèle réalisé avec Keras

Je vais expliquer chacun d'eux.

Préparation

Clonez le "convnet-tiroir". J'utilise celui que j'ai fourché, pas l'original. En effet, lors du chargement du modèle Keras, nous avons un peu de personnalisation pour ignorer les couches non dessinables (sauf lorsque vous utilisez un modèle Keras qui contient des couches non dessinables, le référentiel d'origine est OK).

!cd /content
!git clone https://github.com/karaage0703/convnet-drawer
%cd convnet-drawer
!git checkout -b custom_keras_util origin/custom_keras_util

Comment créer un modèle à partir de 0 et le visualiser

Tout d'abord, créez un modèle à partir de zéro et visualisez-le.

Importez la bibliothèque.

from convnet_drawer import Model, Conv2D, MaxPooling2D, Flatten, Dense

Créez un modèle. Créez un modèle de la même manière que Keras.

Cependant, les calques non pris en charge tels que le calque d'activation et le calque d'exclusion provoquent une erreur, supprimez ou commentez J'ai commenté cette fois.

Le modèle est un petit modèle de reconnaissance d'image tel qu'utilisé dans MNIST.

model = Model(input_shape=(32, 32, 3))

model.add(Conv2D(32, (3, 3), padding='same'))
# model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
# model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
# model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(128))
# model.add(Activation('relu'))
# model.add(Dropout(0.5))
model.add(Dense(10))
# model.add(Activation('softmax'))

Enregistrez le modèle au format svg et dessinez-le.

model.save_fig("example.svg")
from IPython.display import *
display_svg(SVG('example.svg'))

Maintenant, vous pouvez bien dessiner. C'est le meilleur.

nn-draw.png

Si vous souhaitez dessiner avec Matplotlib, exécutez ce qui suit.

import matplotlib.pyplot as plt
from convnet_drawer import Line, Text

def plot_model(model):
    model.build()
    fig1 = plt.figure(figsize=(5,5),dpi=100)
    ax1 = fig1.add_subplot(111, aspect='equal')
    ax1.axis('off')
    plt.xlim(model.x, model.x + model.width)
    plt.ylim(model.y + model.height, model.y)

    for feature_map in model.feature_maps + model.layers:
        for obj in feature_map.objects:
            if isinstance(obj, Line):
                if obj.dasharray == 1:
                    linestyle = ":"
                elif obj.dasharray == 2:
                    linestyle = "--"
                else:
                    linestyle = "-"
                plt.plot([obj.x1, obj.x2], [obj.y1, obj.y2], color=[c / 255 for c in obj.color], lw=obj.width,
                         linestyle=linestyle)
            elif isinstance(obj, Text):
                ax1.text(obj.x, obj.y, obj.body, horizontalalignment="center", verticalalignment="bottom",
                         size=2 * obj.size / 3, color=[c / 255 for c in obj.color])

Le dessin est le suivant.

plot_model(model)

matplotlib.png

Il a été affiché. Ajustez la taille, etc. par vous-même.

Si vous voulez le faire ressembler à un dessin animé, procédez comme suit.

with plt.xkcd():
  plot_model(model)

manga.png

C'est mignon.

Comment charger un modèle réalisé avec Keras (en utilisant keras-util)

Dans le commentaire de article Qiita, @ wakame1367 a trouvé que "convnet-tiroir" a un PR qui peut lire le modèle Keras, donc c'est aussi J'ai essayé.

Importez le logiciel qui charge Keras (keras_util) et Keras.

import keras_util
from tensorflow.python.keras.layers.convolutional import Conv2D, MaxPooling2D
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers.core import Dense, Dropout, Activation, Flatten

Créons un modèle avec Keras.

model = Sequential()

model.add(Conv2D(32, (3, 3), padding='same', input_shape=(32, 32, 3)))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

Convertissez le modèle avec convnet-tiroir et dessinez-le.

net = keras_util.convert_drawer_model(model)
net.save_fig("sample.svg")
from IPython.display import *
display_svg(SVG('sample.svg'))

J'ai également pu dessiner avec le modèle Keras. La couche d'activation et la couche d'exclusion non prises en charge seront ignorées sans autorisation.

nn-draw.png

Résumé

J'ai brièvement présenté comment exécuter "convnet-tiroir" sur Google Colab. Je suis heureux que vous puissiez visualiser le petit réseau que vous avez créé d'une bonne manière.

Cependant, il est difficile de visualiser avec le dernier énorme réseau de neurones, et je pense que ce n'est pas clair quand il est visualisé. Je pense qu'il est préférable de l'utiliser pour dessiner des points.

Recommended Posts

Comment dessiner facilement la structure d'un réseau de neurones sur Google Colaboratory à l'aide de "convnet-tiroir"
Une commande pour vérifier facilement la vitesse du réseau sur la console
Comment exécuter le code pratique du livre "Making Profitable AI with Python" sur Google Colaboratory
Bases de PyTorch (2) -Comment créer un réseau de neurones-
[NNabla] Comment supprimer le niveau intermédiaire d'un réseau prédéfini
Comment dessiner un graphique avec Matplotlib
J'ai essayé d'améliorer la précision de mon propre réseau neuronal
Comment copier et coller le contenu d'une feuille au format JSON avec une feuille de calcul Google (en utilisant Google Colab)
Comment calculer la volatilité d'une marque
Visualisez la couche interne du réseau neuronal
[2015/11/19] Comment enregistrer un service localement à l'aide du SDK python avec naoqi os
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
Comment écrire une interface graphique à l'aide de la commande maya
L'histoire de la création d'un réseau neuronal de génération musicale
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Implémentation d'un réseau de neurones convolutifs utilisant uniquement Numpy
Créons facilement un gif mathématique en utilisant Google Colaboratory
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police
[NNabla] Comment ajouter une nouvelle couche entre les couches intermédiaires d'un réseau pré-construit
Un mémo sur la façon de surmonter le problème difficile de la capture d'effets avec l'IA
[Explication de la mise en œuvre] Comment utiliser la version japonaise de BERT dans Google Colaboratory (PyTorch)
Exécutez le modèle Caffe sur Google Colaboratory pour prédire l'âge et le sexe des mannequins du monde
Une note sur la façon de préparer facilement un environnement de pratique Linux
Exécutez le programme sans créer d'environnement Python! !! (Comment démarrer avec Google Colaboratory)
[Apprentissage en profondeur] Découvrez comment utiliser chaque fonction du réseau neuronal convolutif [DW jour 3]
Comment générer une requête à l'aide de l'opérateur IN dans Django
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
Comment trouver le coefficient de mise à l'échelle d'une ondelette bipolaire
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
Comment connecter le contenu de la liste dans une chaîne de caractères
Comment utiliser Google Colaboratory
Comment déterminer l'existence d'un élément sélénium en Python
Remarque sur la façon de vérifier la connexion au port du serveur de licences
Comment connaître la structure interne d'un objet en Python
Comment afficher des formules en latex lors de l'utilisation de Sympy (> = 1.4) dans Google Colaboratory
Est-il facile de synthétiser un médicament sur le marché?
Comment vérifier la taille de la mémoire d'une variable en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Comment créer un environnement Python à l'aide de Virtualenv sur Ubuntu 18.04 LTS
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
Comment afficher le résultat de sortie de la commande man Linux dans un fichier
Comment enregistrer une partie d'une longue vidéo en utilisant OpenCV
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
Comment utiliser Jupyter sur le frontal de Spacon ITO
[Renforcer l'apprentissage] Comment dessiner OpenAI Gym sur Google Corab (version 2020.6)
Comment mettre à jour la version Python de Cloud Shell dans GCP
Comprendre le nombre de paramètres d'entrée / sortie du réseau neuronal convolutif
Implémentation d'un réseau de neurones à deux couches 2
Touchez l'objet du réseau neuronal
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
Comment connaître le nombre de processeurs sans utiliser la commande sar
J'ai fait une note du colaboratoire Google qui peut utiliser Spleeter facilement.
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Générer semi-automatiquement une description du package à enregistrer dans PyPI
[NNabla] Comment ajouter une couche de quantification à la couche intermédiaire d'un modèle entraîné
Comment mettre un numéro de ligne au début d'un fichier CSV
Comment dessiner une ligne verticale sur une carte de chaleur dessinée avec Python Seaborn
Comment réparer la population initiale avec un algorithme génétique utilisant DEAP
Comment créer un wrapper qui préserve la signature de la fonction à envelopper