Come iniziare con la classificazione delle immagini
Questo esempio mostra come creare una rete neurale convoluzionale semplice per la classificazione tramite Deep Learning utilizzando l'applicazione Deep Network Designer. Le reti neurali convoluzionali sono strumenti essenziali per il Deep Learning e sono particolarmente adatte per il riconoscimento di immagini.
Caricamento dei dati delle immagini
Carica i dati campione come datastore di immagini. Per accedere a questi dati, aprire l'esempio come script live. La funzione imageDatastore
etichetta automaticamente le immagini in base ai nomi delle cartelle. Il set di dati contiene 10 categorie e ogni immagine all’interno del set di dati ha un formato di 28x28x1 pixel.
unzip("DigitsData.zip") imds = imageDatastore("DigitsData", ... IncludeSubfolders=true, ... LabelSource="foldernames"); classNames = categories(imds.Labels);
Suddividere i dati in set di addestramento, convalida e test. Utilizzare il 70% delle immagini per l'addestramento, il 15% per la convalida e il 15% per i test. Specificare "randomized"
per assegnare la proporzione specificata di file di ciascuna classe ai nuovi set di dati. La funzione splitEachLabel
divide il datastore delle immagini in tre nuovi datastore.
[imdsTrain,imdsValidation,imdsTest] = splitEachLabel(imds,0.7,0.15,0.15,"randomized");
Definizione dell’architettura di rete
Per costruire la rete, utilizzare l'applicazione Deep Network Designer.
deepNetworkDesigner
Per creare una rete nuova, utilizza la funzione di pausa su Blank Network (Rete vuota) e fai clic su New (Nuova).
Nel pannello Designer, definisci l’architettura della rete neurale convoluzionale. Trascina i livelli dalla Layer Library (Libreria livelli) e collegali. Per velocizzare la ricerca tra i livelli, usa la finestra di ricerca Filter layers (Filtrare livelli) nel pannello Layer Library. Per modificare le proprietà di un livello, fai clic sul livello e modifica i valori nel pannello Properties (Proprietà).
Trascinare questi livelli in ordine e collegarli in sequenza. Per prima cosa, trascinare un imageInputLayer sull'area di disegno e impostare InputSize su 28,28,1
.
Quindi, trascinare questi livelli sull'area di disegno e collegarli in ordine:
convolution2dLayer
batchNormalizationLayer
reluLayer
Quindi, collegare un fullyConnectedLayer e impostare OutputSize sul numero di classi presenti nei dati, in questo esempio 10.
Infine, aggiungere un softmaxLayer.
Per verificare che la rete sia pronta per l’addestramento, fare clic su Analyze (Analizza). Il Deep Learning Network Analyzer non riporta errori o avvisi, quindi la rete è pronta per l'addestramento. Per esportare la rete, fare clic su Export (Esporta). L'applicazione salva la rete come variabile net_1
.
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
. Poiché l'obiettivo è la classificazione, utilizzare la perdita di entropia incrociata.
net = trainnet(imdsTrain,net_1,"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.9780
Visualizzare alcune delle previsioni.
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
Per le fasi successive di Deep Learning, si può provare a utilizzare le reti preaddestrate e il transfer learning. Per un esempio, vedere Come iniziare a utilizzare il transfer learning.
Vedi anche
trainingOptions
| Deep Network Designer
Argomenti complementari
- Creazione di una rete di classificazione di immagini semplice
- Avvio rapido del Deep Learning utilizzando il transfer learning
- Prova il Deep Learning in 10 righe di codice MATLAB
- Classificazione di immagini con una rete preaddestrata
- Come iniziare a utilizzare il transfer learning
- Get Started with Time Series Forecasting