John Krohn, Grant Beyleveld und die großartige Illustratorin Aglae Bassens erklären anhand anschaulicher Beispiele und Analogien, was Deep Learning ist, warum es so beliebt ist und wie es sich auf andere Ansätze des maschinellen Lernens bezieht. Das Buch ist ideal für Entwickler, Datenwissenschaftler, Forscher, Analysten und angehende Programmierer, die tiefes Lernen auf ihre Arbeit anwenden möchten. Die theoretischen Berechnungen werden durch den Anwendungscode in Python in Jupyter-Notizbüchern perfekt ergänzt. Sie lernen die Techniken zum Erstellen effektiver Modelle in TensorFlow und Keras kennen und lernen PyTorch kennen.
Grundkenntnisse in Deep Learning ermöglichen es Ihnen, echte Anwendungen zu erstellen - von Computer Vision und Verarbeitung natürlicher Sprache bis hin zur Bilderzeugung und Spielalgorithmen.
Keras-basiertes Netzwerk mit mittlerer Tiefe
Am Ende dieses Kapitels werden wir das neue theoretische Wissen in das neuronale Netzwerk übersetzen und prüfen, ob wir das vorherige Modell flat_net_in_keras.ipynb bei der Klassifizierung handgeschriebener Zahlen übertreffen können.
Die ersten Schritte zum Erstellen eines Netzwerks mit mittlerer Tiefe im Notebook Jupyter intermedial_net_in_keras.ipynb sind identisch mit den Schritten zum Erstellen des Vorgängers - eines flachen Netzwerks. Zunächst werden dieselben Keras-Abhängigkeiten geladen und das MNIST-Dataset auf dieselbe Weise eingegeben und verarbeitet. Wie Sie in Listing 8.1 sehen können, beginnt der Spaß dort, wo die neuronale Netzwerkarchitektur definiert ist.
Listing 8.1. Code, der die neuronale Netzwerkarchitektur mit mittlerer Tiefe definiert
model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(784,)))
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
Die erste Zeile in diesem Codefragment, model = Sequential (), ist dieselbe wie im vorherigen Netzwerk (Listing 5.6). Dies ist eine Instanz eines neuronalen Netzwerkmodellobjekts. Die Abweichungen beginnen in der nächsten Zeile. Darin haben wir die Sigmoid-Aktivierungsfunktion in der ersten verborgenen Schicht durch die Relu-Funktion ersetzt, wie in Kapitel 6 empfohlen. Alle anderen Parameter der ersten Schicht mit Ausnahme der Aktivierungsfunktion blieben gleich: Sie besteht immer noch aus 64 Neuronen, und die Dimension der Eingangsschicht blieb gleich - 784 Neuronen.
Eine weitere signifikante Änderung in Listing 8.1 gegenüber der flachen Architektur in Listing 5.6 ist das Vorhandensein einer zweiten verborgenen Schicht künstlicher Neuronen. Durch Aufrufen von model.add () fügen wir mühelos eine zweite dichte Ebene mit 64 relu-Neuronen hinzu, wodurch das Wort intermediär im Notizbuchnamen gerechtfertigt wird. Wenn Sie model.summary () aufrufen, können Sie sehen, wie in Abb. 8.9 dass diese zusätzliche Schicht im Vergleich zu einer flachen Architektur 4160 zusätzliche Lernparameter hinzufügt (siehe Abbildung 7.5). Parameter können unterteilt werden in:
- 4096 Gewichte, die den Verbindungen jedes der 64 Neuronen in der zweiten verborgenen Schicht mit jedem der 64 Neuronen in der ersten verborgenen Schicht entsprechen (64 × 64 = 4096);
- plus 64 Offsets, einer für jedes Neuron in der zweiten verborgenen Schicht;
- Das Ergebnis sind 4160 Parameter: nparameters = nw + nb = 4096 + 64 =
= 4160.
Zusätzlich zu Änderungen an der Modellarchitektur haben wir auch die Kompilierungsoptionen für das Modell geändert, wie in Listing 8.2 gezeigt.
Listing 8.2. Kompilierungscode für neuronale Netze mittlerer Tiefe
model.compile(loss='categorical_crossentropy',
optimizer=SGD(lr=0.1),
metrics=['accuracy'])
Diese Zeilen stammen aus Listing 8.2:
- Stellen Sie eine Kostenfunktion basierend auf der Kreuzentropie ein: loss = 'kategoriale_kreuzentropie' (in einem flachen Netzwerk wurden die quadratischen Kosten verwendet loss = 'mean_squared_error');
- Stellen Sie die Methode des stochastischen Gradientenabfalls ein, um die Kosten zu minimieren: Optimierer = SGD;
- Bestimmen Sie den Hyperparameter der Lerngeschwindigkeit: lr = 0,1 (1) ;
- , , Keras , : metrics=['accuracy'](2).
(1) , , .
(2) , , , , , . , , , . , , : , (, « 86 »), (« 86 , »).
Schließlich trainieren wir das Zwischennetzwerk, indem wir den Code in Listing 8.3 ausführen.
Listing 8.3. Trainingscode für neuronale Netze mittlerer Tiefe
model.fit(X_train, y_train,
batch_size=128, epochs=20,
verbose=1,
validation_data=(X_valid, y_valid))
Das einzige, was sich beim Training des Zwischennetzwerks im Vergleich zum flachen Netzwerk geändert hat (siehe Listing 5.7), ist die Verringerung der Hyperparameter-Epochen um eine Größenordnung von 200 auf 20. Wie Sie später sehen werden, erfordert eine effizientere Zwischenarchitektur viel weniger Epochen zum Trainieren.
In Abb. 8.10 zeigt die Ergebnisse der ersten vier Epochen des Netzwerktrainings. Wie Sie sich vielleicht erinnern, erreichte unsere flache Architektur nach 200 Epochen ein Plateau von 86% Genauigkeit bei Validierungsdaten. Das Netzwerk mit mittlerer Tiefe hat es deutlich übertroffen: Wie das Feld val_acc zeigt, erreichte das Netzwerk nach der ersten Trainingsepoche eine Genauigkeit von 92,34%. Nach der dritten Epoche lag die Genauigkeit über 95%, und bis zur 20. Epoche scheint sie ein Plateau von etwa 97,6% erreicht zu haben. Wir bewegen uns ernsthaft vorwärts!
Schauen wir uns die Ausgabe von model.fit () genauer an (siehe Abb. 8.10:
- Der unten gezeigte
Fortschrittsbalken füllt über 469 „Lernzyklen“ (siehe Abbildung 8.5): 60000/60000 [======================== ======] - 1s 15us/step , 469 1 , 15 .
- loss . 0.4744 (SGD) , 0.0332 .
- acc — . 86.37% 99% . , .
- , (val_loss), , 0.08 .
- (val_acc). , 97.6%, 86% .
Wir haben in diesem Kapitel großartige Arbeit geleistet. Zuerst haben wir gelernt, wie ein neuronales Netzwerk mit festen Parametern Informationen verarbeitet. Dann haben wir die Interaktionsmethoden aussortiert - Kostenfunktionen, stochastischer Gradientenabstieg und Rückausbreitung, mit denen Sie die Netzwerkparameter anpassen können, um jeden wahren Wert von y zu approximieren, der eine kontinuierliche Beziehung zu einer Eingabe x hat. Unterwegs haben wir verschiedene Hyperparameter kennengelernt, darunter Lernrate, Paketgröße und Anzahl der Lernepochen sowie die Faustregeln für die Einstellung der einzelnen Parameter. Am Ende des Kapitels haben wir neues Wissen angewendet, um ein neuronales Netzwerk mittlerer Tiefe zu erstellen, das das vorherige flache Netzwerk bei der Aufgabe der Klassifizierung handgeschriebener Zahlen deutlich übertroffen hat.Als nächstes werden wir uns mit Methoden vertraut machen, um die Stabilität künstlicher neuronaler Netze bei ihrer Vertiefung zu verbessern, wodurch wir ein vollwertiges Deep-Learning-Modell entwickeln und trainieren können.
»Weitere Details zum Buch finden Sie auf der Website des Herausgebers.
» Inhaltsverzeichnis
» Auszug
für Einwohner 25% Rabatt auf den Gutschein - Deep Learning
Nach Zahlung der Papierversion des Buches wird ein E-Book an die E-Mail gesendet.