Main Content

Erste Schritte in der Bildklassifizierung

In diesem Beispiel wird gezeigt, wie ein einfaches Convolutional Neural Network zur Deep-Learning-Klassifizierung mit der App Deep Network Designer erstellt wird. Convolutional Neural Networks sind wichtige Werkzeuge für das Deep Learning und eignen sich vor allem für die Bilderkennung.

Laden von Bilddaten

Laden Sie die Zahlenbeispieldaten als „Image Datastore“ (Bilddatenspeicher). Um auf diese Daten zuzugreifen, öffnen Sie das Beispiel als Live-Skript. Die Funktion imageDatastore benennt die Bilder automatisch basierend auf den Ordnernamen. Der Datensatz besteht aus 10 Klassen und jedes Bild im Datensatz umfasst 28x28x1 Pixel.

unzip("DigitsData.zip")

imds = imageDatastore("DigitsData", ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

classNames = categories(imds.Labels);

Unterteilen Sie die Daten in Trainings-, Validierungs- und Testdatensätze. Verwenden Sie 70 % der Bilder für das Training, 15 % für die Validierung und 15 % für das Testen. Geben Sie "randomized" an, um den angegebenen Anteil der Dateien aus jeder Klasse den neuen Datensätzen zuzuordnen. Die Funktion splitEachLabel teilt den Bilddatenspeicher in drei neue Datastores auf.

[imdsTrain,imdsValidation,imdsTest] = splitEachLabel(imds,0.7,0.15,0.15,"randomized");

Definieren der Netzarchitektur

Verwenden Sie zum Erstellen des Netzes die App Deep Network Designer.

deepNetworkDesigner

Zum Erstellen eines leeren Netzes zeigen Sie mit der Maus auf Blank Network (Leeres Netz) und klicken Sie auf Neu.

Definieren Sie im Fensterbereich Designer die Architektur des Convolutional Neural Network. Ziehen Sie Schichten aus dem Fensterbereich Layer Library (Schichtbibliothek) und verbinden Sie diese. Um schnell nach Schichten zu suchen, verwenden Sie das Suchfeld Filter layers (Schichten filtern) im Fensterbereich Layer Library. Zum Bearbeiten der Eigenschaften einer Schicht klicken Sie auf die Schicht und bearbeiten Sie die Werte im Fensterbereich Properties (Eigenschaften).

Ziehen Sie diese Schichten in der richtigen Reihenfolge und verbinden Sie sie nacheinander. Ziehen Sie zunächst eine imageInputLayer auf die Leinwand und setzen Sie InputSize auf 28,28,1.

Ziehen Sie diese Schichten anschließend auf die Leinwand und verbinden Sie sie der Reihe nach:

  • convolution2dLayer

  • batchNormalizationLayer

  • reluLayer

Verbinden Sie dann eine fullyConnectedLayer und setzen Sie OutputSize auf die Anzahl der Klassen in den Daten, in diesem Beispiel auf 10.

Fügen Sie schließlich eine softmaxLayer hinzu.

Klicken Sie auf Analyze (Analysieren), um zu prüfen, ob das Netz für das Training bereit ist. Der Deep Learning Network Analyzer meldet keine Fehler oder Warnungen, sodass das Netz für das Training bereit ist. Um das Netz zu exportieren, klicken Sie auf Export (Exportieren). Die App speichert das Netz als die Variable net_1.

Festlegen von Trainingsoptionen

Legen Sie die Trainingsoptionen fest. Die Auswahl aus diesen Optionen erfordert eine empirische Analyse. Um verschiedene Konfigurationen von Trainingsoptionen durch Experimente zu untersuchen, können Sie die App Experiment Manager verwenden.

options = trainingOptions("sgdm", ...
    MaxEpochs=4, ...
    ValidationData=imdsValidation, ...
    ValidationFrequency=30, ...
    Plots="training-progress", ...
    Metrics="accuracy", ...
    Verbose=false);

Trainieren von neuronalen Netzen

Trainieren Sie das neuronale Netz mit der Funktion trainnet. Da das Ziel die Klassifizierung ist, verwenden Sie den Kreuzentropieverlust.

net = trainnet(imdsTrain,net_1,"crossentropy",options);

Testen von neuronalen Netzen

Um das neuronale Netz zu testen, klassifizieren Sie die Validierungsdaten und berechnen die Klassifizierungsgenauigkeit.

Machen Sie Vorhersagen mit der Funktion minibatchpredict und wandeln Sie die Ergebnisse mit der Funktion scores2label in Bezeichnungen um. Standardmäßig verwendet die minibatchpredict-Funktion eine GPU, sofern vorhanden.

scores = minibatchpredict(net,imdsValidation);
YValidation = scores2label(scores,classNames);

Berechnen Sie die Klassifizierungsgenauigkeit. Die Genauigkeit ist der Prozentsatz der richtig vorhergesagten Bezeichnungen.

TValidation = imdsValidation.Labels;
accuracy = mean(YValidation == TValidation)
accuracy = 0.9780

Visualisieren Sie einige der Vorhersagen.

numValidationObservations = numel(imdsValidation.Files);
idx = randi(numValidationObservations,9,1);

figure
tiledlayout("flow")
for i = 1:9
    nexttile
    img = readimage(imdsValidation,idx(i));
    imshow(img)
    title("Predicted Class: " + string(YValidation(idx(i))))
end

Für die nächsten Schritte beim Deep Learning können Sie vortrainierte Netze und Transfer Learning verwenden. Ein Beispiel finden Sie unter Erste Schritte mit Transfer Learning.

Siehe auch

|

Verwandte Themen