Main Content

Creazione di una rete di classificazione di immagini semplice

Questo esempio mostra come creare e addestrare una rete neurale convoluzionale semplice per la classificazione tramite Deep Learning. Le reti neurali convoluzionali sono strumenti essenziali per il Deep Learning e sono particolarmente adatte per il riconoscimento di immagini.

L’esempio mostra come:

  • Caricare i dati delle immagini.

  • Definire l’architettura di rete.

  • Specificare le opzioni di addestramento.

  • Addestrare la rete.

  • Predire le etichette per i nuovi dati e calcolare la precisione della classificazione.

Per un esempio su come creare e addestrare in modo interattivo una rete di classificazione semplice di immagini, vedere Come iniziare con la classificazione delle immagini.

Caricamento dei dati

Decomprimere i dati campione della cifra e creare un datastore di immagini. La funzione imageDatastore etichetta automaticamente le immagini in base ai nomi delle cartelle.

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

Suddividi i dati in set di dati di addestramento e di convalida, cosicché ogni categoria del set di addestramento contenga 750 immagini e il set di convalida contenga il resto delle immagini di ogni etichetta. splitEachLabel suddivide il datastore di immagini in due nuovi datastore, uno per l’addestramento e uno per la convalida.

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

Visualizzare i nomi della classe.

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

Definizione dell’architettura di rete

Definire l'architettura della rete neurale convoluzionale. Specificare la dimensione delle immagini nel livello di input della rete e il numero di classi nel livello completamente connesso. Ogni immagine ha un formato di 28x28x1 pixel e ci sono 10 categorie.

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

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

Per ulteriori informazioni sui livelli di Deep Learning, vedere List of Deep Learning Layers.

Specificazione delle opzioni di addestramento

Specificare le opzioni di addestramento. La scelta tra le opzioni richiede un'analisi empirica. Per scoprire le diverse configurazioni delle opzioni di addestramento eseguendo esperimenti, è possibile utilizzare l'applicazione Experiment Manager.

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

Addestramento di reti neurali

Addestrare la rete neurale utilizzando la funzione trainnet. Per la classificazione, utilizzare la perdita di entropia incrociata. Per impostazione predefinita, la funzione trainnet utilizza una GPU, se disponibile. L'utilizzo di una GPU richiede una licenza Parallel Computing Toolbox™ e un dispositivo GPU supportato. Per informazioni sui dispositivi supportati, vedere GPU Computing Requirements (Parallel Computing Toolbox). In caso contrario, la funzione utilizza la CPU. Per specificare l'ambiente di esecuzione, utilizzare l'opzione di addestramento ExecutionEnvironment.

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

Test della rete neurale

Per testare la rete neurale, classificare i dati di convalida e calcolare la precisione della classificazione.

Fare previsioni utilizzando la funzione minibatchpredict e convertire i punteggi in etichette utilizzando la funzione scores2label. Per impostazione predefinita, la funzione minibatchpredict utilizza una GPU, se disponibile.

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

Calcolare la precisione della classificazione. La precisione è la percentuale di etichette previste correttamente.

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

Per le fasi successive del Deep Learning si può provare a utilizzare la rete preaddestrata per altre attività. Risolvi nuovi problemi di classificazione sui dati di immagini con il transfer learning o l’estrazione di feature. Per gli esempi, vedere Avvio rapido del Deep Learning utilizzando il transfer learning e Addestramento dei classificatori utilizzando le feature estratte dalle reti preaddestrate. Per saperne di più sulle reti preaddestrate, vedere Reti neurali profonde preaddestrate.

Vedi anche

| |

Argomenti complementari