Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

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 Creazione di una rete di classificazione di immagini semplice con Deep Network Designer.

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');

Definizione dell’architettura di rete

Definisci l’architettura della rete neurale convoluzionale. Specifica le dimensioni delle immagini nel livello di input della rete e il numero di categorie nel livello pienamente collegato prima del livello di classificazione. 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
    classificationLayer];

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

Addestramento della rete

Specifica le opzioni di addestramento e addestra la rete.

Per impostazione predefinita, trainNetwork utilizza una GPU solo se disponibile, altrimenti utilizza una CPU. L’addestramento su GPU richiede Parallel Computing Toolbox™ e un dispositivo GPU supportato. Per informazioni sui dispositivi supportati, vedere GPU Computing Requirements (Parallel Computing Toolbox). Inoltre, si può specificare l’ambiente di esecuzione tramite l’argomento nome-valore dell’'ExecutionEnvironment' delle trainingOptions.

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

net = trainNetwork(imdsTrain,layers,options);

Figure Training Progress (03-Aug-2023 23:43:54) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 11 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 11 objects of type patch, text, line.

Per ulteriori informazioni sulle opzioni di addestramento, vedere Set Up Parameters and Train Convolutional Neural Network.

Test della rete

Classifica i dati di convalida e calcola la precisione della classificazione.

YPred = classify(net,imdsValidation);
YValidation = imdsValidation.Labels;
accuracy = mean(YPred == YValidation)
accuracy = 0.9888

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