Es ist eine Software, die die Struktur des von @ yu4u erstellten neuronalen Netzwerks auf nette Weise visualisiert. Ich wusste, dass es das schon lange gibt, aber ich hatte es noch nicht ausprobiert, also habe ich es versucht. Es fühlte sich gut an, es in Google Colaboratory (Google Colab) auszuführen, also habe ich ein Notizbuch erstellt, das ich leicht ausprobieren konnte.
Weitere Informationen zu Google Colab finden Sie im folgenden Blog-Beitrag.
[Wenn Sie Google Colaboratory verwenden, müssen Sie keine Umgebung erstellen und können die Python-Maschine kostenlos lernen.
Von hier aus werde ich vorstellen, wie ein neuronales Netzwerk mit "convnet-drawer" in Google Colab gezeichnet wird.
Die Informationen, auf die ich mich bezog, sind der Code der Software von @ yu4u und der folgende Artikel.
Unten finden Sie einen Link zu dem von mir erstellten Google Colab-Notizbuch. convnet_drawer_on_google_colab.ipynb
Wenn Sie das oben genannte tun, werden Sie es verstehen, aber ich werde es kurz erklären. Danach wird davon ausgegangen, dass es in Google Colab ausgeführt wird.
Es gibt zwei Möglichkeiten, ein neuronales Netzwerk zu zeichnen: 2.
Ich werde jeden von ihnen erklären.
Klonen Sie die "Convnet-Schublade". Ich benutze den, den ich gegabelt habe, nicht das Original. Dies liegt daran, dass wir beim Laden des Keras-Modells die benutzerdefinierten Ebenen ein wenig benutzerdefinieren überspringen müssen (außer bei Verwendung des Keras-Modells, das die nicht zeichnbaren Ebenen enthält, ist das ursprüngliche Repository in Ordnung).
!cd /content
!git clone https://github.com/karaage0703/convnet-drawer
%cd convnet-drawer
!git checkout -b custom_keras_util origin/custom_keras_util
Erstellen Sie zunächst ein Modell von Grund auf neu und visualisieren Sie es.
Importieren Sie die Bibliothek.
from convnet_drawer import Model, Conv2D, MaxPooling2D, Flatten, Dense
Erstellen Sie ein Modell. Erstellen Sie ein Modell auf die gleiche Weise wie Keras.
Nicht unterstützte Ebenen wie die Aktivierungsebene und die Dropout-Ebene verursachen jedoch einen Fehler. Löschen oder kommentieren Sie sie aus. Ich habe diesmal auskommentiert.
Das Modell ist ein kleines Modell der Bilderkennung, wie es in MNIST verwendet wird.
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'))
Speichern Sie das Modell im SVG-Format und zeichnen Sie es.
model.save_fig("example.svg")
from IPython.display import *
display_svg(SVG('example.svg'))
Wenn Sie mit Matplotlib zeichnen möchten, führen Sie Folgendes aus.
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])
plot_model(model)
Es wurde angezeigt. Lassen Sie uns die Größe usw. selbst anpassen.
Wenn Sie möchten, dass es wie ein Cartoon aussieht, gehen Sie wie folgt vor.
with plt.xkcd():
plot_model(model)
Das ist süß.
In dem Kommentar von Qiita-Artikel stellte @ wakame1367 fest, dass "convnet-drawer" eine PR hat, die das Keras-Modell lesen kann Ich habe es versucht.
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
Lassen Sie uns ein Modell mit Keras erstellen.
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'])
Konvertieren Sie das Modell mit einer Convnet-Schublade und zeichnen Sie es.
net = keras_util.convert_drawer_model(model)
net.save_fig("sample.svg")
from IPython.display import *
display_svg(SVG('sample.svg'))
Ich konnte auch mit dem Keras-Modell zeichnen. Die nicht unterstützte Aktivierungsschicht und die Dropout-Schicht werden ohne Erlaubnis übersprungen.
Ich habe kurz vorgestellt, wie man "convnet-drawer" in Google Colab ausführt. Ich bin froh, dass Sie das kleine Netzwerk, das Sie erstellt haben, gut visualisieren können.
Es ist jedoch schwierig, mit dem neuesten riesigen neuronalen Netzwerk zu visualisieren, und ich denke, dass es nicht klar ist, wann es visualisiert wird. Ich denke, es ist am besten, es zum Zeichnen von Punkten zu verwenden.
Recommended Posts