[PYTHON] Erstellen eines Lernmodells mit MNIST

Was ist MNIST?

MNIST ist ein Bilddatensatz, der zum Erkennen handgeschriebener Zahlen verwendet wird. Dieses Mal werden wir versuchen, ein Lernmodell zu erstellen, das handschriftliche Zahlen mit einem solchen MNIST identifizieren kann.

MNIST-Daten

Es besteht aus Bilddaten (Bild), die ein Bild von von Hand geschriebenen Zahlen sind, und Etikettendaten (Etikett), die die auf dem Bild geschriebenen Zahlen darstellen.

image.png

Nur 60.000 dieser Paare werden zum Lernen und 10.000 zur Verifizierung bereitgestellt.

Inhalt der tatsächlichen Bilddaten

Um das Lernmodell besser zu verstehen, überprüfen wir, welche Art von Daten tatsächlich in MNIST enthalten sind.


import sys
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from PIL import Image
 
(X_train, y_train), (X_test, y_test) = mnist.load_data()
 
#X_Train Imaging und y_Zugwert
#Lassen Sie uns die Bilddaten des ersten Trainings untersuchen
train_no = 0
 
print('Trainingsbild')
for xs in X_train[train_no]:
    for x in xs:
        sys.stdout.write('%03d ' % x)
    sys.stdout.write('\n')
    
outImg = Image.fromarray(X_train[train_no].reshape((28,28))).convert("RGB")
outImg.save("train.png ")
 
print('Trainingsetikett(y_train) = %d' % y_train[train_no])
 
#X_Test Imaging und y_Wert des Tests
#Lassen Sie uns die Bilddaten des ersten Tests untersuchen
test_no = 0
 
print('Testbild')
for xs in X_test[test_no]:
    for x in xs:
        sys.stdout.write('%03d ' % x)
    sys.stdout.write('\n')
    
outImg = Image.fromarray(X_test[test_no].reshape((28,28))).convert("RGB")
outImg.save("test.png ")
 
print('Testetikett(y_test) = %d' % y_test[test_no])

Dieses Programm zeigt die ersten Lerndaten und die ersten Testdaten an.

X_train = Trainingsbilddaten, y_train = Trainingsetikett, X_test = Testbilddaten, y_test = Testetikett. Wenn Sie also den Inhalt der einzelnen Daten überprüfen, werden die folgenden Ausführungsergebnisse erhalten.

Trainingsbild
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 003 018 018 018 126 136 175 026 166 255 247 127 000 000 000 000 
000 000 000 000 000 000 000 000 030 036 094 154 170 253 253 253 253 253 225 172 253 242 195 064 000 000 000 000 
000 000 000 000 000 000 000 049 238 253 253 253 253 253 253 253 253 251 093 082 082 056 039 000 000 000 000 000 
000 000 000 000 000 000 000 018 219 253 253 253 253 253 198 182 247 241 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 080 156 107 253 253 205 011 000 043 154 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 014 001 154 253 090 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 139 253 190 002 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 011 190 253 070 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 035 241 225 160 108 001 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 081 240 253 253 119 025 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 045 186 253 253 150 027 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 016 093 252 253 187 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 249 253 249 064 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 046 130 183 253 253 207 002 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 039 148 229 253 253 253 250 182 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 024 114 221 253 253 253 253 201 078 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 023 066 213 253 253 253 253 198 081 002 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 018 171 219 253 253 253 253 195 080 009 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 055 172 226 253 253 253 253 244 133 011 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 136 253 253 253 212 135 132 016 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
Trainingsetikett(y_train) = 5
Testbild
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 084 185 159 151 060 036 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 222 254 254 254 254 241 198 198 198 198 198 198 198 198 170 052 000 000 000 000 000 000 
000 000 000 000 000 000 067 114 072 114 163 227 254 225 254 254 254 250 229 254 254 140 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 017 066 014 067 067 067 059 021 236 254 106 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 083 253 209 018 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 022 233 255 083 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 129 254 238 044 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 059 249 254 062 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 133 254 187 005 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 009 205 248 058 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 126 254 182 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 075 251 240 057 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 019 221 254 166 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 003 203 254 219 035 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 038 254 254 077 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 031 224 254 115 001 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 133 254 254 052 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 061 242 254 254 052 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 121 254 254 219 040 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 121 254 207 018 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
Testetikett(y_test) = 7

Sie können die Zahlen 5 und 7 schwach sehen. Und das Etikett wurde ebenfalls angezeigt.

Erstellen eines Lernmodells mit MNIST

Das Modell des maschinellen Lernens ist ein Modell, das einen Eingabewert in einer Form empfängt, die von einem Computer verstanden werden kann, eine Bewertung / Beurteilung vornimmt und einen Ausgabewert ausgibt. Für die Entwicklung eines Modells ist eine große Menge an Trainingsdaten erforderlich, die diesmal von MNIST verarbeitet werden.       Nachdem Sie wiederholt aus allen Blickwinkeln gelernt haben, testen Sie, um das Verständnis zu messen. Dies wird als Bewertung der Genauigkeit des Modells bezeichnet, und dort werden Testdaten verwendet.

Lassen Sie uns tatsächlich ein Lernmodell erstellen.

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import Adam 
from keras.utils import np_utils
 
def build_model():
 #Modell erstellen
 model = Sequential()
 model.add(Dense(512, input_shape=(784,)))
 model.add(Activation('relu'))
 model.add(Dropout(0.2))
 
 model.add(Dense(512))
 model.add(Activation('relu'))
 model.add(Dropout(0.2))
 
 model.add(Dense(10))
 model.add(Activation('softmax'))
 
 #Definition der Verlustfunktion
 model.compile(
 loss='categorical_crossentropy',
 optimizer=Adam(),
 metrics=['accuracy'])
 
 return model
 
if __name__ == "__main__":
 #MNIST-Daten lesen
 #Trainingsdaten 60.000, Testdaten 10.000
 #28 Pixel x 28 Pixel=784 Pixel Daten
 #Farben sind 0-255
 (X_train, y_train), (X_test, y_test) = mnist.load_data()
 X_train = X_train.reshape(60000, 784).astype('float32')
 X_test = X_test.reshape(10000, 784).astype('float32')
 X_train /= 255
 X_test /= 255
 
 #In ein 10-dimensionales Array konvertieren//Die Nummer 5 sieht so aus[0,0,0,0,1,0,0,0,0,0]
 y_train = np_utils.to_categorical(y_train, 10)
 y_test = np_utils.to_categorical(y_test, 10)
 
 #Training mit Daten Dieses Mal lernen wir zweimal, weil Zeit gespart wird
 model = build_model()
 model.fit(X_train, y_train, 
 nb_epoch=2, #Anzahl der Male, die Sie dieses Mal zweimal lernen müssen, wenn Sie pytyon nb mögen_Epoche ist eine Wiederholung der Reichweite
 batch_size=128, #128 Bilder werden zufällig aufgenommen. Jede Zahl ist in Ordnung
 validation_data=(X_test, y_test)
 )
 
 
 #Speichern des Trainingsmodells
 json_string = model.to_json()
 #Erweiterung des Modelldateinamens.json
 open('mnist.json', 'w').write(json_string)
 #Gewichtsdatei speichern Erweiterung ist hdf5
 model.save_weights('mnist.hdf5')
 
 #Bewerten Sie das Modell
 score = model.evaluate(X_test, y_test, verbose=1)
 
 print('loss=', score[0])
 print('accuracy=', score[1])

Es gibt zwei Trainingsmodelle, eine JSON-Datei und eine HDF5-Datei.

Das Ausführungsergebnis ist

Train on 60000 samples, validate on 10000 samples
Epoch 1/2
60000/60000 [==============================] - 9s 152us/step - loss: 0.2453 - accuracy: 0.9264 - val_loss: 0.0981 - val_accuracy: 0.9683
Epoch 2/2
60000/60000 [==============================] - 9s 150us/step - loss: 0.1009 - accuracy: 0.9693 - val_loss: 0.0752 - val_accuracy: 0.9760
10000/10000 [==============================] - 1s 65us/step
loss= 0.07517002068450675
accuracy= 0.9760000109672546

Wir konnten ein Modell mit einer korrekten Antwortrate von 97% erstellen.

Da die Daten leicht zu verstehen sind, haben wir mit einer kleinen Anzahl von Epochen = 2 gelernt, um Zeit zu sparen, aber wir können eine gewisse Genauigkeit erzielen.

Eigentlich lernst du mit Zahlen wie 500 und 1000.

Zusammenfassung

Vertiefte mein Verständnis von maschinellem Lernen und MNIST. Ich möchte den Code, den ich dieses Mal geschrieben habe, auf meine eigene Weise entwickeln, damit ich die Genauigkeit verbessern kann.

Recommended Posts

Erstellen eines Lernmodells mit MNIST
Erstellen eines Positionsschätzungsmodells für den Intelligenzwettbewerb menschlicher Wölfe mithilfe von maschinellem Lernen
Erstellen einer Webanwendung mit Flask ②
Erstellen einer einfachen Tabelle mit Stettytable
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
Inverse Analyse des maschinellen Lernmodells
Erstellen einer Webanwendung mit Flask ①
Erstellen einer Webanwendung mit Flask ③
Erstellen einer Webanwendung mit Flask ④
Erstellen eines sequentiellen Tensorflow-Modells mit einem zu MNIST hinzugefügten Originalbild
Python: Einführung in Flask: Erstellen einer Nummernidentifizierungs-App mit MNIST
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Erstellen einer Datenanalyseanwendung mit Streamlit
Holen Sie sich ein Referenzmodell mit Django Serializer
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
Ich habe mit dem TensorFlow --⑦ Lernmodell einen Dir en grey Gesichtsklassifikator erstellt
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Verstärkungslernen 10 Versuchen Sie es mit einem trainierten neuronalen Netz.
[Python] Implementierung von Clustering mit einem gemischten Gaußschen Modell
Versuchen Sie, eine komprimierte Datei mit Python und zlib zu erstellen
4. Erstellen eines strukturierten Programms
Erstellen eines seq2seq-Modells mithilfe der Funktions-API-Übersicht von keras
Erstellen Sie ein Diagramm mit der Plot-Schaltfläche und dem Schieberegler
Ich habe versucht, ein Beispielmodell von Pytorch mit TorchServe zu hosten
Erstellung von Schabewerkzeugen
Lernen eines neuronalen Netzes mit Chainer - Erstellen eines Web-API-Servers
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Erstellen eines seq2seq-Modells unter Verwendung der funktionalen API-Inferenz von keras
Erstellen eines Dataset Loader
[Maschinelles Lernen] Textklassifizierung mit dem Transformer-Modell (Aufmerksamkeitsbasierter Klassifikator)
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
xgboost: Effektives Modell für maschinelles Lernen für Tabellendaten
(Hinweis) Eine Geschichte zum Erstellen eines Frage- und Antwortsystems mit Spring Boot und maschinellem Lernen (SVM).
Implementierung von VGG16 mit Keras, die ohne Verwendung eines trainierten Modells erstellt wurden
100 Sprachverarbeitung Knock-84 (mit Pandas): Erstellen einer Wortkontextmatrix
Ein Hinweis beim Erstellen eines gerichteten Diagramms mit Graphviz in Python
Starten einer maschinellen Lernumgebung mit Google Compute Engine (GCE)
Ich habe versucht, Tensorboard zu verwenden, ein Visualisierungstool für maschinelles Lernen
Ich habe ein VGG16-Modell mit TensorFlow gemacht (unterwegs)
Benutzer wird nach dem Erstellen eines benutzerdefinierten Benutzermodells nicht erfolgreich hinzugefügt
Versuchen Sie, eine multimodale Verteilung mithilfe des EM-Algorithmus zu modellieren
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Modell des maschinellen Lernens unter Berücksichtigung der Wartbarkeit
Erstellen von Spigot-Plugins mit Eclipse
Zeitmessung mit einer Uhr
Pfeffer-Tutorial (5): Verwenden eines Tablets
Verwenden eines Druckers mit Debian 10
Erstellen Sie eine maschinelle Lernumgebung
Modellbildung, Lernen und Denken lernen
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 3 [Zeichenerkennung anhand eines Modells]
Ein Memorandum zur Verwendung von eigen3
Erstellen Sie mit turicreate eine API, die Daten aus einem Modell zurückgibt
Künstliche Intelligenz durch maschinelles Lernen mit TensorFlow aus Null Wissen schaffen - Einführung 1
[Tutorial] Erstellen Sie mithilfe von maschinellem Lernen in 30 Minuten einen einzigartigen Ausdrucksextraktor