In diesem Artikel wird beschrieben, dass ein Kerasmodell für die handschriftliche Ziffernerkennung unter Verwendung eines Faltungsnetzes (CNN) und des MNIST -Datensatzes erstellt wird. Lassen Sie es uns für Klarheit und verbesserten Fluss umformulieren.
Erstellen eines handgeschriebenen Ziffernerkenners mit Keras
Dieses Tutorial zeigt, dass er ein Modell erstellt, um handgeschriebene Ziffern mithilfe der Python-Keras-Bibliothek zu erkennen, eine API auf hoher Ebene, die den Bau und die Schulung neuronaler Netzwerke vereinfacht. Wir nutzen die Kraft von Faltungsnetzwerken (CNNs) und des weit verbreiteten MNIST -Datensatzes.
.Verständnis des Ansatzes
Unser Modell verwendet eine CNN, eine besonders effiziente Architektur für die Bildklassifizierung. Im Gegensatz zu herkömmlichen neuronalen Netzwerken verarbeiten CNNS -Prozessdaten in einem 3D -Array (X, Y -Koordinaten und Farbe), was sie ideal für Bilddaten macht. Der MNIST -Datensatz, der 60.000 Schulungen und 10.000 Testbeispiele für handgeschriebene Ziffern enthält, liefert die erforderlichen markierten Daten für das Training.
künstliche neuronale Netzwerke (Anns) und CNNs
An ANN ist ein mathematisches Modell, das Eingangsdaten in Ausgabe durch versteckte Schichten transformiert, wobei jede Schicht eine Wahrscheinlichkeit darstellt. Das Training beinhaltet die Anpassung von Gewichten und Verzerrungen, die auf Fehlern basieren und das Netzwerk ermöglichen, Muster zu lernen.
CNNs bieten einen erheblichen Vorteil für die Bildverarbeitung. Ihre 3D -Array -Struktur bedeutet, dass jeder versteckte Schichtknoten nur mit einem kleinen Eingabebereich verbunden ist und die Effizienz im Vergleich zu herkömmlichen ANNs dramatisch erhöht. Zu den wichtigsten CNN -Schichten gehören Faltungsschichten (Merkmalextraktion), Pooling -Schichten (Merkmalsreduzierung), Abflachungsschichten (Dimensionalitätsreduzierung) und eine endgültige Klassifizierungsschicht.
Arbeiten mit dem MNIST -Datensatz
mnist.load_data()
Der MNIST -Datensatz ist innerhalb von Keras leicht verfügbar. Wir laden das Trainings- und Testdaten mit
from keras.datasets import mnist import matplotlib.pyplot as plt (x_train, y_train), (x_test, y_test) = mnist.load_data() image_index = 35 plt.imshow(x_train[image_index], cmap='Greys') plt.show()
Die Trainings- und Testsätze haben Abmessungen (60000, 28, 28) bzw. (10000, 28, 28), was 28x28 Pixel -Bilder anzeigt.
Datenvorverarbeitung
Vor dem Modellerstellen müssen Daten vorverarbeitet werden: <🎜>
.reshape()
in das Format von (m x n x 1) umgestaltet. y_train
Die abhängige Variable (y_test
, to_categorical()
) wird in eine Binärklassenmatrix unter Verwendung from keras.datasets import mnist import matplotlib.pyplot as plt (x_train, y_train), (x_test, y_test) = mnist.load_data() image_index = 35 plt.imshow(x_train[image_index], cmap='Greys') plt.show()
Modelldesign und -training
Unser CNN -Modell ist nacheinander erstellt:
img_rows, img_cols = 28, 28 x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1) / 255 x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1) / 255 y_train = to_categorical(y_train, num_classes=10) y_test = to_categorical(y_test, num_classes=10)
sparse_categorical_crossentropy
Das Modell wird unter Verwendung von .fit()
Verlust (für Ganzzahl -Etiketten), dem Adam -Optimierer und der Genauigkeit als Metrik kompiliert. Das Training wird mit
from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D model = Sequential([ Conv2D(32, (3, 3), activation='relu', input_shape=(img_rows, img_cols, 1)), Conv2D(64, (3, 3), activation='relu'), MaxPooling2D((2, 2)), Dropout(0.25), Flatten(), Dense(128, activation='relu'), Dropout(0.5), Dense(10, activation='softmax') # 10 output classes (digits 0-9) ])
Testen mit einem benutzerdefinierten Bild
.predict()
Um das Modell zu testen, laden wir ein benutzerdefiniertes handgeschriebenes Ziffernbild, Vorverarbeitung (konvertieren Sie es in Graustufen, formulieren, normalisieren), laden Sie das gespeicherte Modell und verwenden Sie
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=128, epochs=10, validation_data=(x_test, y_test)) model.save("test_model.h5")
Schlussfolgerung
Dieses Tutorial bietet ein grundlegendes Verständnis für den Aufbau eines handgeschriebenen Ziffernerkennungsmodells unter Verwendung von Keras und CNNs. Während die hohe Genauigkeit (z. B. & gt; 99%) eine hohe Genauigkeit erreicht, sind weitere Verbesserungen durch Modellparameterabstimmungen, Datenerweiterung und Erforschung fortschrittlicherer CNN -Architekturen möglich. Die bereitgestellten FAQs bieten weitere Einblicke in die beteiligten Konzepte.
Das obige ist der detaillierte Inhalt vonEin Anfängerleitfaden zu Keras: Ziffernerkennung in 30 Minuten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!