[PYTHON] So zeichnen Sie einfach die Struktur eines neuronalen Netzwerks in Google Colaboratory mit "convnet-drawer"

nn-draw.png

Was ist "Convnet-Schublade"?

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.

Wie zeichnet man die Struktur eines neuronalen Netzwerks?

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.

Durch das Definieren eines Faltungs-Neuronalen Netzwerks in einem Keras-Stil wurde ein Tool zum Speichern von Architekturdiagrammen in PowerPoint erstellt.

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.

Vorbereitung

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

So erstellen Sie ein Modell aus 0 und visualisieren es

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'))
nn-draw.png

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)

matplotlib.png

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)

manga.png

Das ist süß.

So laden Sie ein mit Keras erstelltes Modell (mit keras-util)

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.

nn-draw.png

Zusammenfassung

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

So zeichnen Sie einfach die Struktur eines neuronalen Netzwerks in Google Colaboratory mit "convnet-drawer"
Ein Befehl zum einfachen Überprüfen der Netzwerkgeschwindigkeit auf der Konsole
So führen Sie den Übungscode des Buches "Profitable KI mit Python erstellen" in Google Colaboratory aus
Grundlagen von PyTorch (2) - Wie erstelle ich ein neuronales Netzwerk?
[NNabla] So entfernen Sie die mittlere Ebene eines vorgefertigten Netzwerks
So zeichnen Sie ein Diagramm mit Matplotlib
Ich habe versucht, die Genauigkeit meines eigenen neuronalen Netzwerks zu verbessern
Kopieren und Einfügen des Inhalts eines Blattes im JSON-Format mit einer Google-Tabelle (mithilfe von Google Colab)
So berechnen Sie die Volatilität einer Marke
Visualisieren Sie die innere Schicht des neuronalen Netzwerks
[19.11.2015] So registrieren Sie einen Dienst lokal mit dem Python SDK bei naoqi os
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
So schreiben Sie eine GUI mit dem Befehl maya
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Analysieren mit Google Colaboratory mithilfe der Kaggle-API
Implementierung eines Faltungs-Neuronalen Netzwerks mit nur Numpy
Lassen Sie uns mit Google Colaboratory ganz einfach ein mathematisches GIF erstellen
Ich möchte einen Screenshot der Site in Docker mit einer beliebigen Schriftart erstellen
[NNabla] So fügen Sie eine neue Ebene zwischen den mittleren Ebenen eines vorgefertigten Netzwerks hinzu
Ein Memo darüber, wie man das schwierige Problem der Erfassung von FX mit AI überwinden kann
[Erklärung zur Implementierung] Verwendung der japanischen Version von BERT in Google Colaboratory (PyTorch)
Führen Sie das Caffe-Modell in Google Colaboratory aus, um Alter und Geschlecht der Supermodels der Welt vorherzusagen
Ein Hinweis zur einfachen Vorbereitung einer Linux-Übungsumgebung
Führen Sie das Programm aus, ohne eine Python-Umgebung zu erstellen! !! (Erste Schritte mit Google Colaboratory)
[Deep Learning] Untersuchen Sie, wie jede Funktion des Faltungsnetzes verwendet wird [DW Tag 3]
So generieren Sie eine Abfrage mit dem IN-Operator in Django
Wie man die Anzahl der GPUs aus Python kennt ~ Hinweise zur Verwendung von Multiprocessing mit pytorch ~
So ermitteln Sie den Skalierungskoeffizienten eines bipolaren Wavelets
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge
So verwenden Sie Google Colaboratory
So bestimmen Sie die Existenz eines Selenelements in Python
Ein Hinweis zum Überprüfen der Verbindung zum Lizenzserver-Port
Wie Sie die interne Struktur eines Objekts in Python kennen
So zeigen Sie Formeln in Latex an, wenn Sie sympy (> = 1.4) in Google Colaboratory verwenden
Wie einfach ist es, ein Medikament auf dem Markt zu synthetisieren?
So überprüfen Sie die Speichergröße einer Variablen in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
So erstellen Sie eine Python-Umgebung mit Virtualenv unter Ubuntu 18.04 LTS
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
So speichern Sie einen Teil eines langen Videos mit OpenCV
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
Verwendung von Jupyter am Frontend von Spacon ITO
[Lernen stärken] Wie zeichnet man OpenAI Gym auf Google Corab (Version 2020.6)?
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Verstehen Sie die Anzahl der Eingabe- / Ausgabeparameter des Faltungs-Neuronalen Netzes
Implementierung eines zweischichtigen neuronalen Netzwerks 2
Berühren Sie das Objekt des neuronalen Netzes
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
So ermitteln Sie die Anzahl der CPUs ohne den Befehl sar
Ich habe mir das Google-Labor notiert, das Spleeter problemlos verwenden kann.
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Erzeugt halbautomatisch eine Beschreibung des Pakets, das in PyPI registriert werden soll
[NNabla] Hinzufügen einer Quantisierungsschicht zur mittleren Schicht eines trainierten Modells
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
Wie zeichnet man eine vertikale Linie auf einer Heatmap, die mit Python Seaborn gezeichnet wurde?
Wie man die anfängliche Population mit einem genetischen Algorithmus unter Verwendung von DEAP fixiert
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält