Einführung
Der Artikel richtet sich an diejenigen, die sich jemals für die Frage interessiert haben, was innerhalb des künstlichen neuronalen Netzwerks
( ANN) geschieht. Jetzt kann fast jeder seine eigene ANN mit den vorgefertigten Bibliotheken entwickeln, die in den meisten Programmiersprachen verfügbar sind. In diesem Artikel werde ich versuchen zu zeigen, wie das Objekt (
Muster ) genau aussieht, indem es die Ebenen des ANN durchläuft, die mithilfe der
Tensorflow Deep Learning-
Bibliothek mit dem
Keras- Add-
In entwickelt und kompiliert wurden.
Gebrauchte Software
Die folgenden Komponenten sind erforderlich (die Versionen, die ich für meinen Fall angegeben habe):
- Tensorflow 1.10.0
- Keras 2.2.4
- matplotlib 2.2.0
- modul-os
- numpy1.14.3
Es ist auch möglich, die Netzwerkarchitektur zu zeichnen, aber dafür ist es notwendig, Visualisierungstools zu installieren, in meinem Fall wurden
Keras verwendet, und in der Methode
PLOT_PATTERN_PROCCESS(...)
zu etablieren
PLOT_MODEL = True def PLOT_PATTERN_PROCCESS(model, pattern, FOLDER_TO_SAVE, grid_size=(3, 3), limit_size_layer=(15, 15), PLOT_MODEL=True):

Hauptidee
Es ist notwendig, ein Muster auszuwählen (die Passage, die wir beobachten werden). Nach der Auswahl wird das Netzwerk in
Tensorschichten unterteilt. Im Zyklus von der zweiten bis zur letzten Schicht wird ein neues Netzwerk erstellt, wobei die Ausgabe die Nummer der Schicht im Zyklus ist. Wenn das Muster übersprungen wird, ist das Ergebnis am Netzwerkausgang ein n-dimensionales Array.
Implementierung
Bibliotheken verbinden
from keras.models import * from keras.layers import * import matplotlib.pyplot as plt import os import numpy as np
Verwendete Methoden:
def PLOT_PATTERN_PROCCESS (Modell, Muster, FOLDER_TO_SAVE, grid_size = (3, 3), limit_size_layer = (15, 15), PLOT_MODEL = True): def PLOT_PATTERN_PROCCESS(model, pattern, FOLDER_TO_SAVE, grid_size=(3, 3), limit_size_layer=(15, 15), PLOT_MODEL=True): """ :param model: keras :type model: Sequential :param pattern: , :type pattern: np.array :param FOLDER_TO_SAVE: :type FOLDER_TO_SAVE: str :param grid_size: :type grid_size: tuple :param limit_size_layer: :type limit_size_layer: tuple :param PLOT_MODEL: :type PLOT_MODEL: PLOT_MODEL """ SAVE_AR_LIST = [] for num_layer in range(1, len(model.layers)): LO = model.layers[num_layer].output _model = Model(inputs=model.input, outputs=LO) if ( len(_model.output_shape) == 3 and _model.output_shape[1] > limit_size_layer[0] and _model.output_shape[2] > limit_size_layer[1] ): _output = _model.predict(pattern)[0] SAVE_AR_LIST.append( [ num_layer, model.layers[num_layer].name, _output.tolist() ] )
def build_model (IN_SHAPE = 50, CLASSES = 5) -> Sequentiell: def build_model(IN_SHAPE=50,CLASSES=5) -> Sequential: inputs_LAYER0 = Input(shape=(IN_SHAPE,IN_SHAPE)) Dense_2_2 = Dense(75, activation='relu')(inputs_LAYER0) Dense_2_3 = Dense(50, activation='relu', name="my_dense")(Dense_2_2) Dense_2_4 = Dense(25, activation='relu')(Dense_2_3) Dense_2_5 = Dense(10, activation='relu')(Dense_2_4) flat_f_0 = Flatten()(Dense_2_5) final_layer= Dense(CLASSES, activation='softmax')(flat_f_0)
Programmcode
model_ = build_model() pattern = np.random.sample((1,50,50)) os.makedirs("PLOT_PATTERN_PROCCESS") PLOT_PATTERN_PROCCESS( model = model_, pattern = pattern, FOLDER_TO_SAVE = "PLOT_PATTERN_PROCCESS", PLOT_MODEL=False, grid_size=(2, 2) )
Programmbeschreibung
Methode
build_model()
Gibt ein ANN-Modell im
sequentiellen Format zurück, mit dem etwas in 5 Klassen eingeteilt werden soll.
model.summary () _________________________________________________________________ Layer (type) Output Shape Param
Wie Sie der Architektur entnehmen können, ist ein Muster ein Array der Größe 50 x 50. Variable
pattern
und es gibt ein beobachtbares Objekt.
Als nächstes wird ein Verzeichnis erstellt
os.makedirs("PLOT_PATTERN_PROCCESS")
,
wo das gesamte Ergebnis gespeichert wird.
Methodenbeschreibung PLOT_PATTERN_PROCCESS
Ich habe die Bedeutung der Methode oben beschrieben, aber es ist wichtig zu sagen, dass wir nicht alle Ebenen benötigen, da die Ausgaben einiger Ebenen nicht angezeigt werden können oder dies nicht informativ ist.
Das Abrufen des Ausgabemusters erfolgt hier:
_output = _model.predict(pattern)[0]
In dieser Implementierung können Sie ein zweidimensionales Ausgabemuster anzeigen, dessen Abmessungen nicht kleiner als der Parameter sind
limit_size_layer
Abwechselnd durch die Ebenen des ANN-Modells die Variable
SAVE_AR_LIST
allmählich mit Daten gefüllt:
- Ebenennummer
num_layer
- Ebenenname
model.layers[num_layer].name
- Zweidimensionales Array ausgeben
_output.tolist()
Ein Ergebnis nach und nach ausschließen
SAVE_AR_LIST
,
und in die Leinwandzelle legen
ax.imshow(np.array(ar), cmap='viridis', extent=(xmin, xmax, ymin, ymax))
.
Das Ergebnis ist eine Datei
(0.png)
Empfehlungen
Viel Glück!