Faltungsneurales Netzwerk und seine Integration in iOS (Teil 1)


Mittel zur Umsetzung.

Verschiedene Algorithmen für maschinelles Lernen sind in viele Programmiersprachen auf hoher Ebene integriert. Das beliebteste und am schnellsten wachsende von ihnen ist Python.

TensorFlow ist eine offene Softwarebibliothek für maschinelles Lernen, die von Google entwickelt wurde, um die Probleme beim Aufbau und Training eines neuronalen Netzwerks zu lösen, um Bilder automatisch zu finden und zu klassifizieren und so die Qualität der menschlichen Wahrnehmung zu erreichen. Die Haupt-API für die Arbeit mit der Bibliothek ist für Python implementiert.

Keras ist eine offene neuronale Netzwerkbibliothek. Es ist ein Add-On für die Frameworks TensorFlow und Theano. Es zielt auf die operative Arbeit mit Deep-Learning-Netzwerken ab und ist kompakt, modular und erweiterbar.

Die neueste Version von Python 3.7.2 wird als Interpreter ausgewählt. Die Entwicklungsumgebung ist PyCharm Community.

Datenaufbereitung.

In der modernen Welt ist es für die meisten KI-Aufgaben nicht erforderlich, den Datensatz manuell zu erfassen. Es gibt viele Ressourcen, in denen nach der Registrierung vorgefertigte Datensätze heruntergeladen werden können. Ein Datensatz mit zehn Ziffern in Gebärdensprache wurde ausgewählt (Abb. 1).

Abb. 1. - Zahlen in Gebärdensprache.

Der Algorithmus muss das Vorhandensein einer Geste auf dem Foto erkennen und mit einer Zahl von 0 bis 9 klassifizieren. Bevor Sie die Architektur des neuronalen Netzwerks erstellen, müssen Sie Daten für das Training vorbereiten. Zunächst werden die Daten des Gebärdensprachendatensatzes heruntergeladen. Die erste Datei enthält 2063 Schwarzweißbilder mit Zahlen in Gebärdensprache. Bilder haben eine Größe von 64x64 Pixel. Die zweite Datei enthält eine Beschriftung (Vektor), die dem Bild entspricht.

Die Pixelwerte in den Bildern sind normalisiert und liegen im Intervall (0,1). Sie können sie sofort verwenden, um in das neuronale Netzwerk einzutreten. Das optimalste Ergebnis wird jedoch erzielt, wenn Sie das Standardisierungsverfahren befolgen. Nach seiner Ausführung werden die Regeln für jede Pixelmatrix erfüllt: Der

Durchschnittswert in der Matrix ist Null.
Die Streuung in der Matrix ist Eins.

Fotos werden standardisiert und zu einem neuen Array hinzugefügt, um sie anschließend mit vorherigen Daten zu kombinieren (

Abb. 2). Abb. 2. - Das Verfahren zum Laden und Verarbeiten von Bildern.

Neuronale Netzwerkarchitektur.

Network_sign_lang.py - Die Hauptprojektdatei, in der das neuronale Netzwerk beschrieben wird. Zu Beginn des Skripts werden mehrere globale Variablen des neuronalen Netzwerks beschrieben (Abb. 3).

Abb. 3. - Globale Optionen.

Batch_size - Die Anzahl der Bilder, die für jede Iteration in das neuronale Netzwerk eingespeist werden. Num_classes - Die Anzahl der Klassen, die das Modell vorhersagen wird. Img_size - Die Größe der Bilder, die der Eingabeebene zugeführt werden.

Die Funktion train_test_split () aus der Sklearn-Bibliothek wird in das Projekt importiert, teilt die X- und y-Arrays im Verhältnis 80:20 in Trainings- und Testbeispiele auf und mischt die Daten nach dem Zufallsprinzip, sodass sie nicht nach Klassen sortiert werden.

Anschließend wird das Modell initialisiert (Abb. 4) und die erste Schicht von Conv2D hinzugefügt. Bilder vom Xtrain-Array werden eingegeben, die Dimension des Ausgaberaums wird angegeben - 64, der Faltungskern - 4x4, der Faltungsschritt und die Aktivierungsfunktion der ReLU-Schicht.

Abb. 4. - Neurales Netzwerk

Da neuronale Netze typischerweise eine viel größere Anzahl von Trainingsdaten verwenden, ist das konstruierte Modell anfällig für Umschulungen. Um dies zu vermeiden, wird eine effektive Regularisierungsmethode wie Dropout verwendet. Diese Schicht schließt den angegebenen Prozentsatz an zufälligen Neuronen aus, so dass es keine Überlastung zwischen den Schichten gibt. Die Zahl 0,5 bedeutet, dass der Algorithmus bei jeder Charge die Hälfte der zufälligen Neuronen ausschließt. Die zweite Hauptschicht ähnelt ebenfalls der ersten - Faltungsschicht. (Conv2D)

Die nächste ist die Pooling-Schicht (MaxPooling2D). Es dient als weiterer Filter für die Modellausgabe. Da sich die Bedeutung des Bildes bei horizontaler oder vertikaler Anzeige der Zahlen nicht ändert, sollte das neuronale Netzwerk sie gleich klassifizieren.

Die Abflachungsschicht dient als Verbindung zwischen den vom Algorithmus erhaltenen Daten und dem Ausgabevektor mit der Vorhersage. Die letzte Schicht des Netzwerks ist die dichte Schicht mit Sofmax-Aktivierungsfunktion. Mit dieser Funktion können Sie einen normalisierten Wahrscheinlichkeitsvektor für jede Klasse erhalten, wobei die Summe der Wahrscheinlichkeiten gleich eins ist.

Als Nächstes müssen Sie das erstellte Modell kompilieren, indem Sie die folgenden Parameter angeben: Metrik, Verlustfunktion und Optimierer. Als Metrik wird die Genauigkeit gewählt - der Prozentsatz der korrekt klassifizierten Beispiele. Die Verlustfunktion ist kategorial_kreuzentropie. Optimierungsalgorithmus - Adam. Vor Beginn des Trainings werden mehrere Rückrufe hinzugefügt. EarlyStopping - Beendet das Lernen des neuronalen Netzwerks, wenn seine Genauigkeit mit den Epochen des Lernens nicht mehr zunimmt. ModelCheckpoint - speichert die besten Modellgewichte zur späteren Verwendung in einer Datei.

Das Training des neuronalen Netzwerks beginnt mit dem Speichern von Daten über seinen Prozess in der historischen Variablen. Validation_split - Nimmt zehn Prozent der Trainingsdaten zur Validierung, was eine weitere Möglichkeit zur Regularisierung darstellt.

Die Größe der Trainingsstichprobe beträgt 1965 Beispiele, die Teststichprobe 547 und die Validierungsstichprobe 219. Nach Abschluss des Trainingsprozesses wird ein Diagramm der Abhängigkeit der erhaltenen Genauigkeit von den Trainings- und Testdaten erstellt (Abb. 5).

Abb.5. - Trainingsplan.

Die Grafik zeigt, dass das Modell in der 15. Ära gespeichert wurde (mit der größten Genauigkeit und der kleinsten Lücke zwischen Xtrain und Xtest).

Der nächste Schritt besteht darin, die resultierenden neuronalen Netze in ein anderes Skript zu laden, um ihre Funktion zu überprüfen. Die Werte der Metriken in den Testdaten werden angezeigt (Abb. 6).

Abb. 6. - Überprüfung der Leistung des Modells.

Basierend auf den Ergebnissen der Metriken können wir schließen, dass sich die Modelle nicht stark unterscheiden. Je niedriger der Verlustfunktionsindex ist, desto sicherer sind die Vorhersagen des Algorithmus. Die Genauigkeit oder Wiedergabetreue des Modells gibt den Prozentsatz der korrekt klassifizierten Fotos an. Je höher es ist, desto besser ist das neuronale Netzwerk. Folglich ist es logischer, das erste Modell zu verwenden, das als Ergebnis eines vorzeitigen Abbruchs der Bildung erhalten wurde.

Wir werden im nächsten Teil über die Datenvorverarbeitung und die Integration eines neuronalen Netzwerks eines bestimmten Formats in eine iOS-Anwendung sprechen.

All Articles