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.
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.
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.
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
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.
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)
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)
C'est mignon.
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.
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.