Ein einfacher Überblick über Multilayer Perceptron (MLP) | von Francke Peixoto | Juli 2023

0
29


Das Verständnis dieses Netzwerks hilft uns, Informationen über die zugrunde liegenden Gründe in den fortgeschrittenen Modellen des Deep Studying zu erhalten. Mehrschichtiges Perzeptron wird häufig bei einfachen Regressionsproblemen verwendet. Allerdings sind MLPs nicht ideally suited für die Verarbeitung von Mustern mit sequentiellen und mehrdimensionalen Daten.

🙄 Ein mehrschichtiges Perzeptron ist bestrebt, sich Muster in sequentiellen Daten zu merken, weshalb es eine „große“ Anzahl von Parametern benötigt, um mehrdimensionale Daten zu verarbeiten.

Für sequentielle Daten gilt: RNNs sind die Lieblinge, weil ihre Muster es dem Netzwerk ermöglichen, Abhängigkeiten 🧠 von den historischen Daten zu entdecken, was für Vorhersagen sehr nützlich ist. Für Daten wie Bilder und Movies CNNs zeichnen sich durch das Extrahieren von Ressourcenkarten für Klassifizierung, Segmentierung und andere Aufgaben aus.

In einigen Fällen ein CNN in Type von Conv1D /1D wird auch für Netzwerke mit sequentiellen Eingabedaten verwendet. Bei den meisten Modellen von Tiefes LernenMLP, CNN oder RNN werden kombiniert, um das Beste aus jedem herauszuholen.

MLP, CNN und RNN machen nicht alles …
Ein Großteil seines Erfolgs beruht auf der Identifizierung seines Ziels und der guten Wahl einiger Parameter, wie z Verlustfunktion, OptimiererUnd Regularisierer.

Wir haben auch Daten von außerhalb des Trainingsumfelds. Die Rolle des Regularisierers besteht darin, sicherzustellen, dass das trainierte Modell auf neue Daten verallgemeinert wird.

Angenommen, unser Ziel besteht darin, ein Netzwerk zur Identifizierung von Zahlen anhand handgeschriebener Ziffern zu schaffen. Wenn beispielsweise der Eingang zum Netzwerk ein Bild einer Zahl 8 ist, muss die entsprechende Prognose ebenfalls 8 sein.
🤷🏻‍♂️ Dies ist eine grundlegende Aufgabe der Klassifizierung mit neuronalen Netzen.

Der Nationales Institut für Standards und Technologie Der Datensatz MNIST gilt als Whats up World! Deep-Studying-Datensätze.

Vor der Analyse des MLP-Modells ist es wichtig, den MNIST-Datensatz zu verstehen. Es wird zur Erklärung und Validierung vieler Deep-Studying-Theorien verwendet, da die 70.000 darin enthaltenen Bilder klein, aber ausreichend informationsreich sind;

MNIST ist eine Sammlung von Ziffern im Bereich von 0 bis 9. Es verfügt über einen Trainingssatz von 60.000 Bildern und 10.000 Assessments, die in Kategorien unterteilt sind.

Die Verwendung des MNIST-Datensatzes in TensorFlow ist einfach.

import numpy as np
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

Der mnist.load_data() Die Methode ist praktisch, da nicht alle 70.000 Bilder und ihre Beschriftungen geladen werden müssen.

Vor dem Einstieg in den Multilayer-Perceptron-Klassifikator muss unbedingt beachtet werden, dass die MNIST-Daten zwar aus zweidimensionalen Tensoren bestehen, diese jedoch je nach Artwork der Eingabeschicht umgestaltet werden müssen.

Ein 3×3-Graustufenbild wird für die MLP-, CNN- und RNN-Eingabeebenen umgeformt:

Die Bezeichnungen haben die Type von Ziffern von 0 bis 9.

num_labels = len(np.distinctive(y_train))
print("whole de labels:t{}".format(num_labels))
print("labels:ttt{0}".format(np.distinctive(y_train)))

⚠️ Diese Darstellung ist nicht für die Prognoseebene geeignet, die Wahrscheinlichkeiten nach Klasse generiert. Das am besten geeignete Format ist One-Scorching, ein 10-dimensionaler Vektor, der alle 0-Werte mit Ausnahme des Klassenindex aufweist. Wenn die Beschriftung beispielsweise 4 ist, lautet der entsprechende Vektor [0,0,0,0, 1, 0,0,0,0,0].

Beim Deep Studying werden Daten in einem Tensor gespeichert. Der Begriff Tensor bezieht sich auf einen Skalartensor (Tensor 0D), einen Vektor (Tensor 1D), eine Matrix (zweidimensionaler Tensor) und einen mehrdimensionalen Tensor.

#converter em one-hot
from tensorflow.keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

Unser Modell ist ein MLP, daher müssen Ihre Eingaben ein 1D-Tensor sein. Daher müssen x_train und x_test in umgewandelt werden [60,000, 2828] Und [10,000, 2828],

In Numpy bedeutet die Größe -1, dass die Bibliothek die richtige Dimension berechnen kann. Im Fall von x_train sind es 60.000.

image_size = x_train.form[1] 
input_size = image_size * image_size
print("x_train:t{}".format(x_train.form))
print("x_test:tt{}n".format(x_test.form))
x_train = np.reshape(x_train, [-1, input_size])
x_train = x_train.astype('float32') / 255
x_test = np.reshape(x_test, [-1, input_size])
x_test = x_test.astype('float32') / 255
print("x_train:t{}".format(x_train.form))
print("x_test:tt{}".format(x_test.form))
OUTPUT:
x_train:	(60000, 28, 28)
x_test: (10000, 28, 28)
x_train:	(60000, 784)
x_test: (10000, 784)

Unser Modell besteht aus drei Multilayer-Perceptron-Schichten in einer dichten Schicht. Das erste und das zweite sind identisch, gefolgt von a Gleichgerichtete Lineareinheit (ReLU) und Ausfallen Aktivierungsfunktion.

from tensorflow.keras.fashions import Sequential
from tensorflow.keras.layers import Dense, Activation, Dropout

# Parameters
batch_size = 128 # It's the pattern measurement of inputs to be processed at every coaching stage.
hidden_units = 256
dropout = 0.45

# Nossa MLP com ReLU e Dropout
mannequin = Sequential()

mannequin.add(Dense(hidden_units, input_dim=input_size))
mannequin.add(Activation('relu'))
mannequin.add(Dropout(dropout))

mannequin.add(Dense(hidden_units))
mannequin.add(Activation('relu'))
mannequin.add(Dropout(dropout))

mannequin.add(Dense(num_labels))

Ein neuronales Netzwerk neigt dazu, seine Trainingsdaten zu speichern, insbesondere wenn es über mehr als genug Kapazität verfügt. In diesem Fall versagt das Netzwerk katastrophal, wenn es den Testdaten ausgesetzt wird.

Dies ist der klassische Fall, dass das Netzwerk nicht verallgemeinert (Überanpassung / Unteranpassung). Um diesen Development zu vermeiden, verwendet das Modell eine Regulierungsebene. Ausfallen.

Die Idee von Dropout ist einfach. Bei einer gegebenen Abwurfrate (in unserem Modell legen wir = 0,45 fest) entfernt die Ebene diesen Bruchteil der Einheiten zufällig.

Wenn die erste Ebene beispielsweise 256 Einheiten hat, sind nach der Anwendung von Dropout (0,45) nur (1–0,45) * 255 = 140 Einheiten an der nächsten Ebene beteiligt

Dropout macht neuronale Netze robuster gegenüber unvorhergesehenen Eingabedaten, da das Netz darauf trainiert ist, korrekte Vorhersagen zu treffen, selbst wenn einige Einheiten fehlen.

⚠️ Der Aussteiger nimmt während des Trainings nur am „Spielen“ 🤷🏻‍♂️ teil.

Die Ausgabeschicht besteht aus 10 Einheiten, gefolgt von einer Softmax-Aktivierungsfunktion. Die 10 Einheiten entsprechen den 10 möglichen Labels, Klassen oder Kategorien.

Die Aktivierung von Softmax kann mathematisch gemäß der folgenden Gleichung ausgedrückt werden:

Mehrschichtiges Perzeptron - softmax
mannequin.add(Activation('softmax'))
mannequin.abstract()
Mannequin: "sequential"
_________________________________________________________________
Layer (sort) Output Form Param #
=================================================================
dense (Dense) (None, 256) 200960
_________________________________________________________________
activation (Activation) (None, 256) 0
_________________________________________________________________
dropout (Dropout) (None, 256) 0
_________________________________________________________________
dense_1 (Dense) (None, 256) 65792
_________________________________________________________________
activation_1 (Activation) (None, 256) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 256) 0
_________________________________________________________________
dense_2 (Dense) (None, 10) 2570
_________________________________________________________________
activation_2 (Activation) (None, 10) 0
=================================================================
Complete params: 269,322
Trainable params: 269,322
Non-trainable params: 0
_________________________________________________________________

Der Zweck der Optimierung besteht darin, die Verlustfunktion zu minimieren. Die Idee ist, dass das Modell indirekt die Funktion erlernt, die die Eingaben den Ausgaben zuordnet, wenn der Verlust auf ein akzeptables Maß reduziert wird. Mithilfe von Leistungsmetriken wird ermittelt, ob Ihr Modell gelernt hat.

mannequin.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
  • Categorical_crossentropy wird für One-Scorching verwendet
  • Genauigkeit ist eine gute Metrik für Klassifizierungsaufgaben.
  • Adam ist ein Optimierungsalgorithmus, der anstelle des klassischen stochastischen Gradientenabstiegsverfahrens verwendet werden kann

📌 Angesichts unseres Trainingssatzes, der Wahl der Verlustfunktion, des Optimierers und des Regularisierers können wir mit dem Coaching unseres Modells beginnen.

mannequin.match(x_train, y_train, epochs=20, batch_size=batch_size)
OUTPUT:
Epoch 1/20
469/469 [==============================] - 1s 3ms/step - loss: 0.4230 - accuracy: 0.8690
....
Epoch 20/20
469/469 [==============================] - 2s 4ms/step - loss: 0.0515 - accuracy: 0.9835

An diesem Punkt ist unser MNIST-Ziffernklassifikatormodell vollständig. Ihre Leistungsbewertung ist der nächste Schritt bei der Bestimmung, ob das trainierte Modell eine suboptimale Lösung darstellt

_, acc = mannequin.consider(x_test,
y_test,
batch_size=batch_size,
verbose=0)
print("nAccuracy: %.1f%%n" % (100.0 * acc))
Accuracy: 98.4%

Künstliche Intelligenz für Cybersicherheit – Seite 282

😍 Franckepeixoto. Ein einfacher Überblick über Deep Studying mit mehrschichtigem Perzeptron (MLP). https:// www.analyticsvidhya.com/blog/2020/12/mlp-multilayer-perceptron-simple-overview/, 2020. 282 R. Gothankar et al. Verweise.



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here