Main Content

Erstellen eines einfachen Netzes zur Bildklassifizierung

Dieses Beispiel veranschaulicht, wie Sie ein einfaches Convolutional Neural Network für die Deep-Learning-Klassifizierung erstellen und trainieren können. Convolutional Neural Networks sind wichtige Werkzeuge für das Deep Learning und eignen sich vor allem für die Bilderkennung.

Das Beispiel veranschaulicht, wie Sie vorgehen müssen:

  • Laden von Bilddaten.

  • Definieren der Netzarchitektur.

  • Angeben der Trainingsoptionen.

  • Trainieren des Netzes.

  • Vorhersage der Bezeichnungen neuer Daten und Berechnung der Klassifizierungsgenauigkeit.

Ein Beispiel für das interaktive Erstellen und Trainieren eines einfachen Bildklassifizierungsnetzes finden Sie unter Erste Schritte in der Bildklassifizierung.

Laden der Daten

Entpacken Sie die Zahlenbeispieldaten und erstellen Sie einen „Image Datastore“ (Bilddatenspeicher). Die Funktion imageDatastore benennt die Bilder automatisch basierend auf den Ordnernamen.

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

Unterteilen Sie die Daten in Trainings- und Validierungsdatensätze, sodass jede Kategorie in der Trainingsmenge 750 Bilder enthält, während die Validierungsmenge die verbleibenden Bilder der einzelnen Bezeichnungen enthält. splitEachLabel unterteilt den Image Datastore in zwei neue Datastores für das Training und die Validierung.

numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,"randomized");

Sehen Sie sich die Klassennamen an.

classNames = categories(imdsTrain.Labels)
classNames = 10x1 cell
    {'0'}
    {'1'}
    {'2'}
    {'3'}
    {'4'}
    {'5'}
    {'6'}
    {'7'}
    {'8'}
    {'9'}

Definieren der Netzarchitektur

Definieren Sie die Architektur des Convolutional Neural Network. Geben Sie die Größe der Bilder in der Eingabeschicht des Netzes und die Anzahl der Klassen in der vollständig verbundenen Schicht an. Jedes Bild besteht aus 28x28x1 Pixeln und es gibt 10 Klassen.

inputSize = [28 28 1];
numClasses = 10;

layers = [
    imageInputLayer(inputSize)
    convolution2dLayer(5,20)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer];

Weitere Informationen zu Deep-Learning-Schichten finden Sie unter List of Deep Learning Layers.

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. Verwenden Sie zur Klassifizierung den Kreuzentropieverlust. Standardmäßig verwendet die trainnet-Funktion eine GPU, sofern vorhanden. Die Verwendung einer GPU erfordert eine Parallel Computing Toolbox™-Lizenz und ein unterstütztes GPU-Gerät. Informationen zu unterstützten Geräten finden Sie unter GPU Computing Requirements (Parallel Computing Toolbox). Andernfalls verwendet die Funktion die CPU. Um die Ausführungsumgebung festzulegen, verwenden Sie die Trainingsoption ExecutionEnvironment.

net = trainnet(imdsTrain,layers,"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.9896

In den nächsten Schritten des Deep Learning können Sie versuchen, das vortrainierte Netz für andere Aufgaben zu verwenden. Lösen Sie neue Klassifizierungsprobleme für Ihre Bilddaten mithilfe von Transfer Learning oder Merkmalsextraktion. Beispiele finden Sie unter Start Deep Learning Faster Using Transfer Learning und Train Classifiers Using Features Extracted from Pretrained Networks. Weitere Informationen zu vortrainierten Netzen finden Sie unter Pretrained Deep Neural Networks.

Siehe auch

| |

Verwandte Themen