Main Content

Die Übersetzung dieser Seite ist veraltet. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Erste Schritte mit Transfer Learning

Das folgende Beispiel veranschaulicht, wie Sie mithilfe von Transfer Learning das vortrainierte faltende neuronale Netz SqueezeNet für die Klassifizierung einer neuen Bildmenge neu trainieren können. Probieren Sie dieses Beispiel aus, um festzustellen, wie einfach die ersten Schritte mit Deep Learning in MATLAB® sein können.

Wenn Sie eine visuelle Anleitung für das Beispiel benötigen, sehen Sie sich das Video an.

Transfer Learning wird in Deep-Learning-Anwendungen häufig eingesetzt. Sie können ein vortrainiertes Netz als Ausgangspunkt zum Erlernen einer neuen Aufgabe verwenden. Die Feinabstimmung eines Netzes mit Transfer Learning ist in der Regel wesentlich schneller und einfacher als das Training eines Netzes von Grund auf mit zufällig initialisierten Gewichtungen. Sie können Merkmale, die mit Transfer Learning erlernt wurden, schnell einer neuen Aufgabe hinzufügen und dabei weniger Trainingsbilder verwenden.

Extrahieren von Daten

Extrahieren Sie im Arbeitsbereich den Datensatz „MathWorks Merch“. Hierbei handelt es sich um einen kleinen Datensatz, der 75 Bilder von MathWorks Merchandising-Artikeln enthält, die zu fünf verschiedenen Klassen gehören: cap (Kappe), cube (Würfel), playing cards (Spielkarten), screwdriver (Schraubendreher) und torch (Taschenlampe).

unzip("MerchData.zip");

Laden des vortrainierten Netzes

Öffnen Sie Deep Network Designer.

deepNetworkDesigner

Wählen Sie aus der Liste der vortrainierten Netze den Eintrag SqueezeNet aus und klicken Sie auf Open.

Deep Network Designer zeigt eine verkleinerte Ansicht des gesamten Netzes an.

Untersuchen Sie das Netzdiagramm. Wenn Sie die Ansicht mithilfe der Maus vergrößern möchten, halten Sie die Strg-Taste gedrückt und bewegen Sie das Mausrad. Verwenden Sie zum Schwenken die Pfeiltasten oder halten Sie das Mausrad gedrückt, während Sie die Maus verschieben. Wählen Sie eine Schicht aus, um ihre Eigenschaften anzuzeigen. Heben Sie die Auswahl aller Schichten auf, um die Netzzusammenfassung im Fensterbereich Properties anzuzeigen.

Importieren von Daten

Zum Laden der Daten in Deep Network Designer klicken Sie auf der Registerkarte Data auf Import Data > Import Image Classification Data.

Wählen Sie aus der Liste Data source (Datenquelle) den Eintrag Folder (Ordner) aus. Klicken Sie auf Browse, und wählen Sie den extrahierten Ordner „MerchData“ aus.

Unterteilen Sie die Daten in 70 % Trainingsdaten und 30 % Validierungsdaten.

Geben Sie Augmentationsvorgänge an, die für die Trainingsbilder ausgeführt werden sollen. Durch Daten-Augmentation kann verhindert werden, dass das Netz eine Überanpassung vornimmt und sich die exakten Details der Trainingsbilder merkt. Wenden Sie in diesem Beispiel eine zufällige Reflexion in der x-Achse, eine zufällige Drehung aus dem Bereich [-90,90] Grad und eine zufällige Neuskalierung aus dem Bereich [1,2] an.

Klicken Sie auf Import, um die Daten in Deep Network Designer zu importieren.

Bearbeiten des Netzes für Transfer Learning

Zum Neutrainieren von SqueezeNet für die Klassifizierung neuer Bilder bearbeiten Sie die 2D-Faltungsschicht und die endgültige Klassifizierungsschicht des Netzes. In SqueezeNet haben diese Schichten die Namen 'conv10' bzw. 'ClassificationLayer_predictions'.

Wählen Sie im Fensterbereich Designer die Schicht 'conv10' aus. Klicken Sie am unteren Rand des Fensterbereichs Properties auf Unlock Layer (Schicht entsperren). Klicken Sie im daraufhin angezeigten Dialogfeld mit der Warnung auf Unlock Anyway (Trotzdem entsperren). Auf diese Weise werden die Schichteigenschaften entsperrt, damit Sie diese an Ihre neue Aufgabe anpassen können.

Vor R2023b: Zum Bearbeiten der Schichteigenschaften müssen Sie die Schichten ersetzen, anstatt sie zu entsperren. Legen Sie in der neuen 2D-Faltungsschicht für „FilterSize“ (Filtergröße) den Wert [1 1] fest.

Legen Sie die Eigenschaft NumFilters auf die neue Anzahl der Klassen fest, in diesem Beispiel also 5.

Ändern Sie die Lerngeschwindigkeiten so, dass das Lernen in der neuen Schicht schneller erfolgt als in den transferierten Schichten, indem Sie WeightLearnRateFactor und BiasLearnRateFactor auf 10 festlegen.

Konfigurieren Sie die Ausgangsschicht. Wählen Sie die Klassifizierungsschicht, ClassificationLayer_predictions, aus und klicken Sie auf Unlock Layer (Schicht entsperren) und anschließend auf Unlock Anyway (Trotzdem entsperren). Für die entsperrte Ausgangsschicht müssen Sie die Ausgangsgröße (OutputSize) nicht festlegen. Deep Network Designer legt während zum Trainingszeitpunkt die Ausgangsklassen der Schicht automatisch anhand der Daten fest.

Trainieren des Netzes

Klicken Sie zum Auswählen der Trainingsoptionen auf der Registerkarte Training auf Training Options. Legen Sie für die anfängliche Lerngeschwindigkeit einen kleinen Wert fest, um das Lernen in den transferierten Schichten zu verlangsamen. Im vorherigen Schritt haben Sie die Lerngeschwindigkeitsfaktoren für die 2D-Faltungsschichtt erhöht, um das Lernen in den neuen endgültigen Schichten zu beschleunigen. Diese Kombination der Einstellungen für die Lerngeschwindigkeit führt nur in den neuen Schichten zu einem schnelleren Lernen, während das Lernen in den anderen Schichten langsamer erfolgt.

Legen Sie für dieses Beispiel InitialLearnRate auf 0.0001, MaxEpochs auf 8 und ValidationFrequency auf 5 fest. Da es 55 Beobachtungen gibt, legen Sie MiniBatchSize auf 11 fest, um die Trainingsdaten gleichmäßig zu unterteilen und sicherzustellen, dass die gesamte Trainingsmenge während jeder Epoche verwendet wird.

Zum Trainieren des Netzes mit den angegebenen Trainingsoptionen klicken Sie auf OK und anschließend auf Train.

Deep Network Designer ermöglicht Ihnen die Visualisierung und Überwachung des Trainingsfortschritts. Sie können anschließend die Trainingsoptionen bearbeiten und das Netz bei Bedarf neu trainieren.

Exportieren von Ergebnissen und Generieren von MATLAB Programmcode

Zum Exportieren der Ergebnisse nach dem Training wählen Sie auf der Registerkarte Training die Optionen Export > Export Trained Network and Results (Trainiertes Netz und Ergebnisse exportieren) aus. Deep Network Designer exportiert das trainierte Netz in Form der Variablen trainedNetwork_1 und die Trainingsinformationen in Form der Variablen trainInfoStruct_1.

Sie können auch MATLAB Programmcode generieren, mit dem das Netz und die verwendeten Trainingsoptionen erneut erstellt werden. Wählen Sie auf der Registerkarte Training die Optionen Export > Generate Code for Training (Code für Training generieren) aus. Untersuchen Sie den MATLAB-Programmcode, um zu erfahren, wie Sie die Daten programmgesteuert für das Training vorbereiten, die Netzarchitektur erstellen und das Netz trainieren können.

Klassifizieren eines neuen Bilds

Laden Sie ein neues Bild, das mithilfe des trainierten Netzes klassifiziert werden soll.

I = imread("MerchDataTest.jpg");

Legen Sie die Größe des Testbilds neu fest, damit diese der Netzeingangsgröße entspricht.

I = imresize(I, [227 227]);

Klassifizieren Sie das Testbild mithilfe des trainierten Netzes.

[YPred,probs] = classify(trainedNetwork_1,I);
imshow(I)
label = YPred;
title(string(label) + ", " + num2str(100*max(probs),3) + "%");

Referenzen

[1] ImageNet. http://www.image-net.org

[2] Iandola, Forrest N., Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, and Kurt Keutzer. "SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5 MB model size." Preprint, submitted November 4, 2016. https://arxiv.org/abs/1602.07360.

[3] Iandola, Forrest N. "SqueezeNet." https://github.com/forresti/SqueezeNet.

Siehe auch

| | |

Verwandte Themen