Neuronale Netze sind ein wichtiges Konzept in den Bereichen künstliche Intelligenz und maschinelles Lernen. Sie bestehen aus miteinander verbundenen Knoten, die in Schichten organisiert sind und die Funktionsweise des menschlichen Gehirns nachahmen. Die Knoten repräsentieren die Neuronen des menschlichen Gehirns.
Sie können Ihr eigenes einfaches vorwärtsgerichtetes neuronales Netzwerk mit mehreren Klassen erstellen. Trainieren Sie es, handschriftliche Ziffern mit dem MNIST-Datensatz zu klassifizieren. Sie können dann Computer Vision verwenden, um Ihre eigenen handgeschriebenen Ziffern zu klassifizieren.
Was ist eine Mehrklassenklassifizierung?
Die Mehrklassenklassifizierung ist eine Art des maschinellen Lernens, das Daten in mehr als zwei Kategorien klassifizieren kann. Neuronale Netze verwenden den Softmax-Klassifikator, um die Wahrscheinlichkeit über mögliche Klassen zu verteilen.
Sie können die Mehrklassenklassifizierung verwenden, um handschriftliche Bilder aus dem MNIST-Datensatz in 10 Kategorien zu klassifizieren. Diese Kategorien entsprechen den Ziffern 0 bis 9.
Den MNIST-Datensatz verstehen
Der MNIST-Datensatz ist ein beliebter Benchmark-Datensatz für maschinelles Lernen und Computer-Vision-Algorithmen. Es enthält 70.000 handschriftliche Graustufenbilder mit einer Größe von 28 x 28 Pixel. Die handgeschriebenen Ziffern liegen im Bereich von 0 bis 9.
Bevor Sie ein Modell für maschinelles Lernen erstellen, ist es wichtig zu verstehen, was Ihr Dataset enthält. Wenn Sie den Datensatz verstehen, können Sie eine bessere Datenvorverarbeitung durchführen.
Vorbereiten Ihrer Umgebung
Um diesem Tutorial zu folgen, sollten Sie mit dem vertraut sein Grundlagen von Python. Sie sollten auch eine haben Grundkenntnisse des maschinellen Lernens. Schließlich sollten Sie mit Jupyter Notebook oder Google Colab vertraut sein.
Der vollständige Quellcode ist verfügbar in a GitHub-Repository.
Erstellen Sie ein neues Jupyter Notebook oder melden Sie sich an Google Colab. Führen Sie diesen Befehl aus, um die erforderlichen Pakete zu installieren:
!pip installiere numpy matplotlib tensorflow opencv-python
Du wirst benutzen:
- Matplotlib zur Datenvisualisierung.
- NumPy zum Bearbeiten von Arrays.
- TensorFlow zum Erstellen und Trainieren Ihres Modells.
- OpenCV, um das Modell mit Ihren eigenen handgeschriebenen Ziffern zu füttern.
Importieren der erforderlichen Module
Importieren Sie die Pakete, die Sie in Ihrer Umgebung installiert haben. Dadurch können Sie später ihre Funktionen und Module in Ihrem Code aufrufen und verwenden.
importieren Tensorfluss als tf
aus Tensorfluss importieren Keras
importieren matplotlib.pyplot als plt
%matplotlib inline
importieren taub als np
importieren Lebenslauf2
Die zweite Codezeile importiert das Keras-Modul aus der Google TensorFlow-Bibliothek. Sie werden Keras verwenden, um Ihr tiefes neuronales Netzwerk mit TensorFlow als Backend zu trainieren.
Laden und Anzeigen des Datensatzes
Der MNIST-Datensatz ist in Keras integriert. Laden Sie das MNIST-Dataset und teilen Sie es in Trainings- und Testsets auf. Sie verwenden das Trainingsset, um Ihr Modell zu trainieren, und das Testset, um die Genauigkeit Ihres Modells bei der Klassifizierung neuer unsichtbarer Bilder zu bewerten.
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
Überprüfen Sie die Länge der Trainings- und Testsätze. Der MNIST-Datensatz enthält 60.000 Bilder zum Training und 10.000 Bilder zum Testen.
len (X_Zug)
Länge (X_test)
Überprüfen Sie die Form des ersten Bildes im MNIST-Datensatz, das 28 x 28 Pixel groß sein sollte. Drucken Sie dann die Pixelwerte und visualisieren Sie sie mit Matplotlib.
X_Zug[0].Form
X_Zug[0]
plt.matshow (X_train[0])
y_train[0]
Die Visualisierungsausgabe sieht wie folgt aus:
Das visualisierte Bild zeigt, dass das erste Bild im Datensatz die Zahl fünf enthält.
Datenvorverarbeitung
Bevor Sie die Daten im Dataset zum Trainieren und Testen Ihres Modells verwenden, müssen Sie es vorverarbeiten. Die Vorverarbeitung verbessert die Genauigkeit eines Modells, indem die Daten standardisiert werden.
Normalisieren der Pixelwerte
Normalisieren Sie die Pixelwerte der Bilder im Datensatz, indem Sie jeden Wert durch 255 dividieren. Die Pixelwerte des nicht normalisierten Datensatzes reichen von 0 bis 255, wobei null schwarz und 255 weiß ist. Das Teilen jedes Pixelwerts durch 255 stellt sicher, dass jedes Pixel im Bereich zwischen 0 und 1 liegt. Dies erleichtert es dem Modell, die relevanten Merkmale und Muster in den Daten zu lernen.
X_Zug = X_Zug / 255
X_test = X_test / 255
Drucken Sie dann die Pixelwerte des ersten Bildes.
X_Zug[0]
Beachten Sie, dass sie jetzt im Bereich zwischen 0 und 1 liegen.
Konvertieren der Bildmatrizen in ein 1D-Array
Die Eingabeebene des neuronalen Netzwerks erwartet im Allgemeinen 1D-Eingaben, erstellen Sie also ein 1D-Array der Pixelwerte des Bildes. Verwenden Sie dazu die Funktion reshape(), wobei die Anzahl der Raws auf die Anzahl der Bilder im Datensatz festgelegt ist.
X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (länge (X_test), 28 * 28)
X_train_flattened.shape
X_train_flattened[0]
Ihre Bilder können jetzt trainiert und das Modell getestet werden.
Erstellen des Deep Neural Network-Modells
Erstellen Sie mit dem Keras-Modul von Tensorflow ein sequentielles Modell mit einer Eingabeschicht, zwei verborgenen Schichten und einer Ausgabeschicht. Legen Sie die Eingabeform auf 28 x 28 fest, da dies die Form der Originalbilder im Datensatz ist. Verwenden Sie 128 Knoten für die verborgenen Schichten. Die Ausgabeschicht sollte nur 10 Neuronen haben, da Sie nur die Ziffern 0 bis 9 klassifizieren.
Modell = Keras. Sequentiell([
keras.schichten. Abflachen (input_shape=(28, 28)),keras.schichten. Dicht(128, Aktivierung='relu'),
keras.schichten. Dicht(128, Aktivierung='relu'),
keras.schichten. Dicht(10, Aktivierung='softmax')
])
Kompilieren Sie das Modell mit der Adam Optimierer, sparse_categorical_crossentropy als Verlustfunktion und als Metrik zur Bewertung der Leistung des Modells Genauigkeit. Passen Sie dann die Trainingsdaten in das Modell ein und setzen Sie die Anzahl der Epochen auf fünf.
model.compile (optimierer='Adam',
Verlust='sparse_categorical_crossentropy',
Metriken=['Genauigkeit'])
model.fit (X_Zug, y_Zug, Epochen=5)
Das Trainieren des Modells dauert einige Minuten. Bewerten Sie nach Abschluss des Modelltrainings seine Leistung auf dem Testset.
model.evaluate (X_test, y_test)
Die Bewertungsfunktion gibt den Verlust und die Genauigkeit des Modells zurück. Das Modell liefert eine Genauigkeit von 98 %.
Verwenden des Modells zum Klassifizieren Ihrer eigenen handschriftlichen Ziffern
Um Ihre eigenen handgeschriebenen Ziffern zu klassifizieren, müssen Sie Ihre Bilder so vorbereiten, dass sie mit denen des MNIST-Datensatzes übereinstimmen. Wenn Sie dies nicht tun, führt dies zu einer schlechten Leistung Ihres Modells.
So verarbeiten Sie die Bilder vor:
- Laden Sie das Bild mit der Ziffer mit OpenCV.
- Konvertieren Sie es in Graustufen und ändern Sie die Größe auf 28 x 28 Pixel.
- Spiegeln und normalisieren Sie die Pixelwerte.
- Abschließend glätten Sie das Bild zu einem 1D-Array.
Übergeben Sie das vorverarbeitete Bild zur Vorhersage an das Modell und drucken Sie den vorhergesagten Wert auf dem Bildschirm aus.
img = cv2.imread('Ziffern/Ziffer1.png', cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img, (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.astype('float32') / 255.0# Reduzieren Sie das Bild in ein 1D-Array
input_data = img_normalized.flatten().reshape( 1,28,28)
# Mit dem Modell eine Vorhersage treffen
Vorhersage = model.predict (Eingabedaten)
drucken (f'Vorhersage: {np.argmax (Vorhersage)}')
Übergeben eines vorverarbeiteten Bildes, das eine Zahl enthält, an das Modell.
Die Ausgabe des Modells ist wie folgt:
Das Modell konnte die Ziffer Sieben richtig einordnen.
Neuronale Netze in Chatbots
Die Nutzung neuronaler Netze ist in den letzten Jahren explodiert. Sie wurden überwiegend in der Verarbeitung natürlicher Sprache für die Sprachübersetzung und generative KI verwendet.
In jüngerer Zeit ist die Zahl der Chatbots, die auf menschenähnliche Weise kommunizieren können, gestiegen. Sie verwenden eine Art neuronales Netzwerk, das als transformatorisches neuronales Netzwerk bekannt ist. Interagieren Sie mit einigen von ihnen und erleben Sie die Kraft neuronaler Netze.