Ein einfacher Überblick über mehrschichtiges Perceptron Deep Learning (MLP)

Inhalt

Dieser Artikel wurde im Rahmen der Data Science Blogathon.

Einführung

Das Verständnis dieses Netzwerks hilft uns, Informationen über die zugrunde liegenden Gründe in fortgeschrittenen Deep-Learning-Modellen zu erhalten. Das Mehrschichtperzeptron wird häufig bei einfachen Regressionsproblemen verwendet. Aber trotzdem, MLPs sind nicht ideal für die Verarbeitung von Mustern mit sequenziellen und multidimensionalen Daten.

🙄 Ein Mehrschichtperzeptron bemüht sich, Muster in sequenziellen Daten zu erkennen, deswegen, erfordert eine „große“ Menge von Parameter um multidimensionale Daten zu verarbeiten.

Für sequenzielle Daten, das RNN sind sie Favoriten, weil ihre Muster es dem Netzwerk ermöglichen, die Abhängigkeit 🧠 von historischen Daten zu erkennen, was für Vorhersagen sehr nützlich ist. Für Daten, wie Bilder und Videos, CNN hervorstechen sie bei der Extraktion von Funktionskarten zur Klassifizierung, Segmentierung, unter anderem aufgaben.
In manchen Fällen, ein CNN in der Form von Conv1D / 1D wird auch für Netzwerke mit sequenziellen Eingabedaten verwendet. Aber trotzdem, In den meisten Modellen werden Tiefes Lernen, MLP, CNNs oder RNNs kombiniert, um das Beste aus beiden zu nutzen.

MLP, CNNs und RNNs können nicht alles …
Ein Großteil ihres Erfolgs beruht darauf, ihr Ziel zu erkennen und einige Parameter gut auszuwählen, Was Verlustfunktion, Optimierer, Ja Regularisierer.

Wir haben auch Daten, die nicht aus der Trainingsumgebung stammen. Die Aufgabe des Regularisierers ist es sicherzustellen, dass das trainierte Modell auf neue Daten generalisiert.

1eloyeyfrblghvzhu345pjw-5950207

MNIST-Datensatz

Angenommen, unser Ziel ist es, ein Netzwerk zu erstellen, das Zahlen basierend auf handgeschriebenen Ziffern identifiziert. Zum Beispiel, wenn die Eingabe des Netzwerks ein Bild einer Zahl ist 8, muss auch die entsprechende Vorhersage sein 8.
🤷🏻‍♂️ Este es un trabajo básico de clasificación con redes neuronales.

Antes de analizar el modelo MLP, es esencial comprender el conjunto de datos del MNIST. Se utiliza para explicar y validar muchas teorías de tiefes Lernen porque las 70.000 imágenes que contiene son pequeñas pero suficientemente ricas en información;

MNINST-digits-6507742

MNIST es una colección de dígitos que van del 0 al 9. Tiene un conjunto de Ausbildung von 60.000 imágenes y 10.000 pruebas clasificadas en categorías.

Usar el conjunto de datos MNIST en TensorFlow es simple.

importieren numpy wie z.B
von tensorflow.keras.datasets importieren mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
das mnist.load_data () El método es conveniente, ya que no es necesario cargar las 70.000 imágenes y sus etiquetas.

Antes de entrar en el clasificador de Perceptrón Multicapa, es fundamental tener en cuenta que, si bien los datos del MNIST constan de tensores bidimensionales, se deben remodelar, según el tipo de Eingabeschicht.

Se cambia la forma de una imagen en escala de grises de 3 × 3 para las capas de entrada MLP, CNN y RNN:

inputs-nn-8592597

Las etiquetas tienen forma de dígitos, des 0 al 9.

num_labels = len(np.unique(y_train))
drucken("total de labels:T{}".Format(num_labels))
drucken("Etiketten:ttt{0}".Format(np.unique(y_train)))

⚠️ Esta representación no es adecuada para la capa de pronóstico que genera probabilidad por clase. El formato más adecuado es one-hot, un vector de 10 dimensiones como todos los valores 0, excepto el Index de clase. Zum Beispiel, si la etiqueta es 4, el vector equivalente es [0,0,0,0, 1, 0,0,0,0,0].

De Deep Learning, los datos se almacenan en un Tensor. El término tensor se aplica a un tensor escalar (tensor 0D), vector (tensor 1D), Hauptquartier (tensor bidimensional) Ja tensor multidimensional.

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

Nuestro modelo es un MLP, por lo que sus entradas deben ser un tensor 1D. als solche, x_train y x_test deben transformarse en [60,000, 2828] Ja [10,000, 2828],

In Summe, el tamaño de -1 significa permitir que la biblioteca calcule la dimensión correcta. En el caso de x_train, es ist 60.000.

image_size = x_train.shape[1] 
input_size = image_size * image_size

print("x_train:T{}".Format(x_train.shape))
drucken("x_test:tt{}n".Format(x_test.shape))

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

drucken("x_train:T{}".Format(x_train.shape))
drucken("x_test:tt{}".Format(x_test.shape))
OUTPUT:
x_train:	(60000, 28, 28)
x_test:		(10000, 28, 28)

x_train:	(60000, 784)
x_test:		(10000, 784)

Modell bauen

mlp-nn-3471040
Nuestro modelo consta de tres capas de perceptrón multicapa en una dichte Schicht. El primero y el segundo son idénticos, seguidos de un Rektifizierte Lineareinheit (Lebenslauf) Ja Verlassen Weckfunktion.

1oepahrm74rnnneolprmtaq-9887397

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Aktivierung, Aussteigen

# Parameters
batch_size = 128 # Es ist die Stichprobengröße der Eingaben, die in jeder Trainingsphase verarbeitet werden sollen. 
hidden_units = 256
Ausfall = 0.45

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

model.add(Dicht(hidden_units, input_dim=input_size))
model.add(Aktivierung('relu'))
model.add(Aussteigen(aussteigen))

model.add(Dicht(hidden_units))
model.add(Aktivierung('relu'))
model.add(Aussteigen(aussteigen))

model.add(Dicht(num_labels))

Regulierung

Una red neuronal tiende a memorizar sus datos de entrenamiento, especialmente si contiene capacidad más que suficiente. In diesem Fall, la red falla catastróficamente cuando se somete a los datos de prueba.

Este es el caso clásico en el que la red no logra generalizar (Überanpassung / Unteranpassung). Para evitar esta tendencia, el modelo utiliza una capa reguladora. Verlassen.

1iwqzxhvlvadk6vajjsgxgg-5873176

La idea de Dropout es simple. Dada una tasa de descarte (en nuestro modelo, establecemos = 0,45), la capa elimina aleatoriamente esta fracción de unidades.

Zum Beispiel, si la primera capa tiene 256 Einheiten, después de que se aplica el abandono (0.45), Solo (1 – 0.45) * 255 = 140 Unidades participarán en la siguiente capa

La deserción hace que las redes neuronales sean más robustas para los datos de entrada imprevistos, porque la red está entrenada para predecir correctamente, incluso si algunas unidades están ausentes.

⚠️ El abandono solo participa en „abspielen“ 🤷🏻 ♂️ durante el entrenamiento.

Aktivierung

Das Ausgabe-Layer verfügt über 10 Einheiten, seguidas de una función de activación softmax. Das 10 unidades corresponden a las 10 posibles etiquetas, clases o categorías.

La activación de softmax se puede expresar matemáticamente, de acuerdo con la siguiente ecuación:

1ui7n5s48-qnf7bbgfdpioq-7950293

model.add(Aktivierung('softmax'))
Modell.Zusammenfassung()
OUTPUT:
Modell: "sequenziell"
________________________________________________________________________________
Schicht (Typ)                 Parameter der Ausgabeform #   
=================================================================
dense (Dicht)                (Keiner, 256)               200960    
_________________________________________________________________
activation (Aktivierung)      (Keiner, 256)               0         
_________________________________________________________________
dropout (Aussteigen)            (Keiner, 256)               0         
_________________________________________________________________
dense_1 (Dicht)              (Keiner, 256)               65792     
_________________________________________________________________
activation_1 (Aktivierung)    (Keiner, 256)               0         
________________________________________________________________________________
dropout_1 (Aussteigen)          (Keiner, 256)               0         
________________________________________________________________________________
dicht_2 (Dicht)              (Keiner, 10)                2570      
_________________________________________________________________
activation_2 (Aktivierung)    (Keiner, 10)                0         
================================================ ===============
Gesamtparameter: 269,322
Trainierbare Parameter: 269,322
Nicht trainierbare Parameter: 0
_________________________________________________________________

Visualización de modelos

Verbesserung

El propósito de la Optimización es minimizar la función de pérdida. La idea es que si la pérdida se reduce a un nivel aceptable, el modelo aprendió indirectamente la función que asigna las entradas a las salidas. Las Métricas de rendimiento se utilizan para determinar si su modelo ha aprendido.

model.compile(Verlust="kategoriale_Kreuzentropie", Optimierer="Adam", Metriken=[Genauigkeit])
    • Categorical_crossentropy, Se utiliza para One-Hot
    • La precisión es una buena métrica para las tareas de clasificación.
    • Adam es un Optimierungsalgorithmus macht das als Ersatz für das klassische Abstiegverfahren verwendet werden kann Steigung stochastisch

📌 Angesichts unseres Trainingssatzes, die Wahl des Verlust-Funktion, Optimierers und des Regulators, können wir mit dem Training unseres Modells beginnen.

model.fit(x_train, y_train, Epochen=20, batch_size=batch_size)
OUTPUT:
Epoche 1/20
469/469 [==============================] - 1s 3ms/Schritt - Verlust: 0.4230 - Richtigkeit: 0.8690
....
Epoche 20/20
469/469 [==============================] - 2s 4ms/Schritt - Verlust: 0.0515 - Richtigkeit: 0.9835

Auswertung

In diesem Punkt, unser MNIST-Ziffernklassifikationsmodell ist fertig. Die Leistungsbewertung wird der nächste Schritt sein, um festzustellen, ob das trainierte Modell eine suboptimale Lösung liefert

_, acc = model.evaluate(x_test,
                        y_test,
                        batch_size=batch_size,
                        ausführlich=0)
drucken("nGenauigkeit: %.1f%%n" % (100.0 * acc))
OUTPUT:
Genauigkeit: 98.4%

wird fortgesetzt…

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.

Datenlautsprecher