[PYTHON] Visualisieren Sie die innere Schicht des neuronalen Netzwerks

Dies ist mein erster Beitrag. Außerdem bin ich ein Anfänger im maschinellen Lernen. Ich denke, dass es viele Teile gibt, die schwer zu sehen sind, wie zum Beispiel seltsame Dinge aufgrund mangelnden Verständnisses zu sagen, aber ich würde es begrüßen, wenn Sie mich warm beobachten könnten!

Klasseninitialisierung

visualize.py


from keras.datasets import mnist
from keras.utils import to_categorical
from keras.models import Model, model_from_json
from keras.layers import Input, Conv2D, MaxPooling2D, Dense, Flatten, Dropout
import numpy as np
import seaborn as sns
import os


class Visualize_CNN():
    def __init__(self):
        self.conv1_filter_num = 32
        self.conv1_filter_size = (3,3)
        self.conv1_strides = 1
        self.pool1_filter_size = (2,2)

        self.conv2_filter_num = 64
        self.conv2_filter_size = (5,5)
        self.conv2_strides = 1
        self.pool2_filter_size = (2,2)

        self.dense1_output = 1024
        self.dense2_output = 10

        self.epochs = 1
        self.batch_size = 128

        self.figsize = (10,10)
        self.save_file_path = "../data/model"

Daten lesen

visualize.py


    def load_data(self):
        (x_train, y_train),(x_test,y_test) = mnist.load_data()
        x_train = x_train.astype("float32")/ 256
        x_train = x_train.reshape((-1,28,28,1))
        x_test = x_test.astype("float32")/ 256
        x_test = x_test.reshape((-1,28,28,1))
        y_train = to_categorical(y_train)
        y_test = to_categorical(y_test)
        
        return x_train, y_train, x_test, y_test

Die Vorverarbeitung erfolgt durch Lesen von Mnist-Daten aus keras.datasets. Was ich zu x_train und x_test ging, war Typspezifikation und Normalisierung. Die diesmal durchgeführte Normalisierung ist ** Min-Max-Normalisierung **. Wenn Sie es in einer mathematischen Formel schreiben,

y = \frac{x - x_{min}}{x_{max} - x_{min}}
x_{max}:Maximalwert in den angegebenen Daten,
x_{min}:Ist der Mindestwert in den angegebenen Daten

Es wird sein. Wenn Sie die angegebenen Daten durch die Breite der Maximal- und Minimalwerte dividieren, können Sie den Maximalwert auf 1 und den Minimalwert auf 0 skalieren, oder? Daher denke ich, dass es ** Min-Max-Normalisierung ** ist. Die Daten, die dieses Mal verarbeitet werden, sind mnist. Also der Wert jedes Pixels auf einer Graustufe? Da wir wissen, dass dies 0 bis 255 ist, wird 0 im Minimalwertteil der Formel und 255 im Maximalwertteil eingegeben. y_train und y_test sind One-Hot-Label-Daten. Dieses Mal werden die Daten automatisch konvertiert, indem jedes Argument in keras.utils to_categorical zugewiesen wird.

Modell bauen

build_model.py


    def creat_model(self):
        input_model = Input(shape=(28,28,1))
        conv1 = Conv2D(self.conv1_filter_num,
                       self.conv1_filter_size,
                       padding="same",
                       activation="relu")(input_model)
        pool1 = MaxPooling2D(self.pool1_filter_size)(conv1)
        conv2 = Conv2D(self.conv2_filter_num,
                       self.conv2_filter_size,
                       padding="same",
                       activation="relu"
                      )(pool1)
        pool2 = MaxPooling2D(self.pool2_filter_size)(conv2)
        flat = Flatten()(pool2)
        dense1 = Dense(self.dense1_output,
                      activation="relu")(flat)
        dropout = Dropout(0.25)(dense1)
        dense2 = Dense(self.dense2_output,
                      activation="softmax")(dropout)
        
        model = Model(inputs=input_model, output=dense2)
        return model

Das diesmal gebaute Modell ist so einfach wie zweimal zu falten und zu verbinden. Die Anzahl der Filter (Anzahl der Spalten?) Und die Größe jeder Ebene sind im Teil ** Klasseninitialisierung ** aufgeführt.

Modellschulung und Lagerung

visualize.py


    
    def train_and_save(self):
        x_train, y_train, x_test, y_test = self.load_data()
        model =  self.creat_model_()
        model.compile(optimizer="adam",
                     loss="categorical_crossentropy",
                     metrics=["accuracy"])
        #model.summary()
        history = model.fit(x_train, y_train, 
                           batch_size=self.batch_size,
                           epochs=self.epochs,
                           verbose=2,
                           validation_data=(x_test, y_test))
    json_string = model.to_json()
       open(os.path.join(self.save_file_path, "model.json"),"w").write(json_string)
       model.save_weights(os.path.join(self.save_file_path, "model_weights.h5"))
       print("saving succsessful")

Trainieren Sie das gebaute Modell und speichern Sie das Modell und die trainierten Gewichte. Es scheint, dass model.save (save_file_path) das Modell und das Gewicht gleichzeitig speichert, aber ich wusste nicht, wann ich den Code geschrieben habe, also speichere ich sie separat.

Visualisierung der mittleren Schicht

visualize.py



    def visualize(self):
        x_train,a,b,c = self.load_data()
        json_string = open(os.path.join(self.save_file_path, "model.json")).read()
        model = model_from_json(json_string)
        model.load_weights(os.path.join(self.save_file_path, "model_weights.hdf5"))
        layers = model.layers[1:5]
        outputs = [layer.output for layer in layers]
        acctivation_model = Model(inputs=model.input, output=outputs)
        acctivation_model.summary()

        image = x_train[1].reshape(-1,28,28,1)#Wenn Sie das Eingabebild x ändern möchten_train[j]Bitte ändern Sie j!
        plt.imshow(image.reshape(28,28))
        activation = acctivation_model.predict(image)
        x_axis = 8
        y_axis = 8
        for j in range(len(activation)):
            cul_num = activation[j].shape[3]
            act = activation[j]
            plt.figure(figsize=(self.figsize))

            for i in range(cul_num):
                plt.subplot(8,8,i+1)
                sns.heatmap(act[0,:,:,i])
        plt.show()

Das zuletzt gespeicherte Modell und die Gewichte werden geladen, das Modell, das die Ausgabe anderer Ebenen als der vollständig verbundenen Ebene ausgibt, wird neu definiert und die Ausgabe wird als Heatmap ausgegeben.

Ergebnis

Das Ergebnis ist wie folgt. ** Eingabebild ** Figure_1.png ** Ausgabe der Faltungsschicht 1 ** Figure_2.png ** Ausgabe der Faltungsschicht 2 ** Figure_4.png

Zusammenfassung

Oben habe ich versucht, die mittlere Schicht des ersten Beitrags und das neuronale Netzwerk zu visualisieren! war. Wenn Sie dies hier tun, wird es leichter zu sehen sein! Ratschläge sind willkommen! Vielen Dank für das Anschauen bis zum Ende m (_ _) m

Recommended Posts

Visualisieren Sie die innere Schicht des neuronalen Netzwerks
Implementieren Sie ein dreischichtiges neuronales Netzwerk
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Implementierung eines zweischichtigen neuronalen Netzwerks 2
Berühren Sie das Objekt des neuronalen Netzes
Implementierung eines 3-Schicht-Neuronalen Netzwerks (kein Lernen)
Verstehen Sie die Anzahl der Eingabe- / Ausgabeparameter des Faltungs-Neuronalen Netzes
[NNabla] So erhalten Sie die Ausgabe (Variable) der mittleren Schicht des erstellten Netzwerks
Visualisieren Sie das charakteristische Vokabular eines Dokuments mit D3.js.
Grundlagen von PyTorch (2) - Wie erstelle ich ein neuronales Netzwerk?
Implementierung eines Faltungs-Neuronalen Netzwerks mit nur Numpy
Visualisieren Sie die Flugbahn von Hayabusa 2
[NNabla] So fügen Sie eine neue Ebene zwischen den mittleren Ebenen eines vorgefertigten Netzwerks hinzu
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Aufbau eines neuronalen Netzwerks, das XOR durch Z3 reproduziert
So zeichnen Sie einfach die Struktur eines neuronalen Netzwerks in Google Colaboratory mit "convnet-drawer"
Was ist das Convolutional Neural Network?
Ich habe versucht, ein zweischichtiges neuronales Netzwerk zu implementieren
Visualisieren Sie den Antwortstatus der Volkszählung 2020
Die Geschichte des Exportierens eines Programms
Ein Befehl zum einfachen Überprüfen der Netzwerkgeschwindigkeit auf der Konsole
[NNabla] So entfernen Sie die mittlere Ebene eines vorgefertigten Netzwerks
Fassen wir die Grundfunktionen von TensorFlow zusammen, indem wir ein neuronales Netzwerk erstellen, das XOR-Gatter lernt.
Komponieren Sie mit einem neuronalen Netzwerk! Führen Sie Magenta aus
Erstellen Sie mithilfe des TensorFlow-Faltungsnetzwerks einen Klassifikator mit einer Handschrifterkennungsrate von 99,2%
Messen Sie die Assoziationsstärke in einer Kreuztabelle
Ich habe versucht, die Genauigkeit meines eigenen neuronalen Netzwerks zu verbessern
[NNabla] Hinzufügen einer Quantisierungsschicht zur mittleren Schicht eines trainierten Modells
Visualisieren Sie die Auswirkungen von Deep Learning / Regularisierung
Behalten Sie das mit PyBrain aufgebaute neuronale Netzwerk bei
[Python] [Meta] Ist der Python-Typ ein Typ?
Implementierung von "verschwommenen" neuronalen Netzen mit Chainer
Ermitteln Sie den Wert der mittleren Schicht von NN
Ein Memo, das die Achsenspezifikation der Achse erklärt
Holen Sie sich den Dateinamen des Verzeichnisses (glob)
Die Geschichte der Verarbeitung A von Blackjack (Python)
Fügen Sie mithilfe des Keras-Backends eine Ebene hinzu
Visualisieren Sie die Exportdaten des Piyo-Protokolls
Beachten Sie den Abschluss eines zeitaufwändigen Befehls
Das Ergebnis war besser, als die Trainingsdaten des Mini-Batches als Hybrid aus fest und zufällig mit einem neuronalen Netzwerk erstellt wurden.
Python vs Ruby "Deep Learning von Grund auf neu" Kapitel 3 Implementierung eines dreischichtigen neuronalen Netzwerks
Experimentieren Sie mit verschiedenen Optimierungsalgorithmen im neuronalen Netz
Verstärkungslernen 10 Versuchen Sie es mit einem trainierten neuronalen Netz.
Holen Sie sich den Aufrufer einer Funktion in Python
Überprüfung der Chargennormalisierung mit einem mehrschichtigen neuronalen Netz
Kopieren Sie die Liste in Python
Finden Sie die Anzahl der Tage in einem Monat
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Richtlinien für das Design der Ausgangsschicht neuronaler Netze
Berechnen Sie die Wahrscheinlichkeit von Ausreißern auf den Box-Whiskern
Ich habe das neuronale Netzwerk auf dem eigentlichen FPGA betrieben
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Ausgabe in Form eines Python-Arrays
Erkennung handgeschriebener Zahlen durch ein mehrschichtiges neuronales Netzwerk
Visualisieren Sie das Verhalten des Sortieralgorithmus mit matplotlib
Die Geschichte eines Mel-Icon-Generators
Berücksichtigung der Stärken und Schwächen von Python
Ich habe das TensorFlow-Tutorial mit Kommentaren ausgeführt (erstes neuronales Netzwerk: Beginn des Klassifizierungsproblems)
Parametrisches neuronales Netzwerk