Als Übung in "Von Mosaikentfernung lernen: Modernes Deep Learning" von koshian2 wurde MNIST nach mehrschichtigem Perzeptron klassifiziert. Dieses Mal möchte ich es zusammenfassen, um mein Verständnis zu vertiefen. https://qiita.com/koshian2/items/aefbe4b26a7a235b5a5e
Die Hauptpunkte sind wie folgt.
Ein mehrschichtiges Perzeptron ist ein Netzwerk mit einer Schicht, die als ** Zwischenschicht ** bezeichnet wird, zwischen der Eingangsschicht und der Ausgangsschicht.
Eine Methode, die als Minimum-Square-Methode bezeichnet wird, ist für die Durchführung der Regression bekannt, und eine logistische Regressionsmethode ist für die Durchführung der Klassifizierung bekannt. Diese Methoden haben das Problem, dass die Genauigkeit nicht verbessert werden kann, selbst wenn die Anzahl der Daten erhöht wird. Um diese große Anzahl von Daten zu nutzen, ist das mehrschichtige Perzeptron ein Verfahren zur Verbesserung der Genauigkeit durch Einfügen einer Schicht, die als Zwischenschicht bezeichnet wird, zwischen der Eingangsschicht und der Ausgangsschicht.
mnist.ipynb
import tensorflow as tf
import tensorflow.keras.layers as layers
(X_train,y_train),(X_test,y_test)=tf.keras.datasets.mnist.load_data()
#X_train,y_Zug: Trainingsdaten
#X_test, y_Test: Testdaten
Ich habe die Trainings- und Testdaten direkt aus dem Keras-Datensatz gelesen. Ich benutze oft die Funktion train_test_split, um Testdaten aus den Haupttrainingsdaten zu klassifizieren, aber diesmal ist es einfach zu lesen, ohne dies zu tun.
mnist.ipynb
print(X_train.shape,y_train.shape)
print(X_test.shape,y_test.shape)
(60000, 28, 28) (60000,) (10000, 28, 28) (10000,)
Sie können sehen, dass 60.000 28x28-Trainingsbilddaten und 10.000 28x28-Testbilddaten vorhanden sind.
mnist.ipynb
inputs = layers.Input((28,28))
x = layers.Flatten()(inputs)
x = layers.BatchNormalization()(x)
x = layers.Dense(128, activation='relu')(x)
x = layers.Dense(10, activation="softmax")(x)
outputs = x
model = tf.keras.models.Model(inputs, outputs)
Was ich mit dieser Beschreibung meine, ist wie folgt.
Ich fand es sehr einfach zu verstehen, denn wenn Sie die Ebene ändern möchten, müssen Sie nur eine Zeile ändern.
mnist.ipynb
model.compile('adam', 'sparse_categorical_crossentropy',['sparse_categorical_crossentropy'])
Hier werden die Optimierungsmethode, die Verlustfunktion und die Bewertungsfunktion bestimmt.
Die Optimierungsmethode ist eine Methode zum Ermitteln des Werts eines Parameters, die den Wert der Verlustfunktion so klein wie möglich macht. Dieses Mal wenden wir die häufig verwendete Adam-Methode an.
https://www.slideshare.net/MotokawaTetsuya/optimizer-93979393 https://qiita.com/ZoneTsuyoshi/items/8ef6fa1e154d176e25b8
Die Verlustfunktion verwendet die kategoriale Kreuzentropie. Diese Formel sieht folgendermaßen aus:
Dabei ist $ N $ die Anzahl der Stichproben und $ M $ die Anzahl der Klassen. MNIST sagt die Wahrscheinlichkeit jeder Klasse voraus. Die Fehlerfunktion, die mit der sogenannten Methode der kleinsten Quadrate behandelt wird, eignet sich zur Vorhersage von Preisen, aber ich bin es nicht gewohnt, mit Wahrscheinlichkeiten umzugehen.
Schließlich gibt es noch die Bewertungsfunktion. Dies ist eine nützliche Funktion zur Visualisierung des Trainingsfortschritts, die nicht zur Optimierung verwendet wird.
mnist.ipynb
#Modelltraining
model.fit(X_train,y_train, validation_data=(X_test, y_test),epochs=10)
#Modellvorhersage
y_pred_prob= model.predict(X_test)
y_pred = np.argmax(y_pred_prob, axis=-1)
#Ergebnisausgabe
fig = plt.figure(figsize=(14,14))
for i in range(100):
ax = fig.add_subplot(10,10,i+1)
ax.imshow(X_test[i],cmap="gray")
ax.set_title(y_pred[i])
ax.axis("off")
Für Modellvorhersagen ist der vorhergesagte Wert eine Wahrscheinlichkeit. Nehmen Sie daher argmax (Indexwert, der die Wahrscheinlichkeit maximiert), um in label (0-9) zu konvertieren.
Sie können sehen, dass die Vorhersage funktioniert. Das obige Verfahren ist die Bildklassifizierung von MNIST durch das mehrschichtige Perzeptronmodell.
Ich würde gerne andere Fälle und Arbeiten usw. lernen und erleben, da die mehrschichtige Konstruktionsmethode und die Modellzusammenstellung noch tief sind.
Den vollständigen Code finden Sie hier. https://github.com/Fumio-eisan/minist_mlp20200307
Recommended Posts