Contenuto principale

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

dlnetwork

Rete neurale di Deep Learning

Descrizione

Un oggetto dlnetwork specifica un'architettura di rete neurale di Deep Learning.

Suggerimento

Per la maggior parte delle attività di Deep Learning, è possibile utilizzare una rete neurale preaddestrata e adattarla ai propri dati. Per un esempio su come utilizzare il transfer learning per riaddestrare una rete neurale convoluzionale per classificare un nuovo set di immagini, vedere Retrain Neural Network to Classify New Images. In alternativa, è possibile creare e addestrare reti neurali da zero utilizzando le funzioni trainnet e trainingOptions.

Se la funzione trainingOptions non fornisce le opzioni di addestramento necessarie per l’attività, è possibile creare un loop di addestramento personalizzato usando la differenziazione automatica. Per saperne di più, vedere Train Network Using Custom Training Loop.

Se la funzione trainnet non fornisce la funzione di perdita necessaria per l'attività, è possibile specificare una funzione di perdita personalizzata su trainnet come handle della funzione. Per le funzioni di perdita che richiedono più input rispetto alle previsioni e ai target (ad esempio, le funzioni di perdita che richiedono l'accesso alla rete neurale o ulteriori input), addestrare il modello utilizzando un loop di addestramento personalizzato. Per saperne di più, vedere Train Network Using Custom Training Loop.

Se Deep Learning Toolbox™ non fornisce i livelli necessari per l’attività, è possibile creare un livello personalizzato. Per saperne di più, vedere Define Custom Deep Learning Layers. Per i modelli che non possono essere specificati come reti di livelli, è possibile definire il modello come funzione. Per saperne di più, vedere Train Network Using Model Function.

Per ulteriori informazioni sul metodo di addestramento da utilizzare per un determinato compito, vedere Train Deep Learning Model in MATLAB.

Creazione

Descrizione

Rete vuota

net = dlnetwork crea un oggetto dlnetwork senza livelli. Utilizzare questa sintassi per creare una rete neurale da zero. (da R2024a)

esempio

Rete con livelli di input

net = dlnetwork(layers) crea la rete neurale utilizzando i livelli specificati e inizializza tutti i parametri apprendibili e di stato non impostati. Questa sintassi utilizza il livello di input in layers per determinare la grandezza e il formato dei parametri apprendibili e di stato della rete neurale.

Utilizzare questa sintassi quando layers definisce una rete neurale completa a input singolo, con livelli disposti in serie e con un livello di input.

esempio

net = dlnetwork(layers,OutputNames=names) imposta inoltre la proprietà OutputNames. La proprietà OutputNames specifica i livelli o gli output dei livelli che corrispondono agli output della rete.

Utilizzare questa sintassi quando layers definisce una rete neurale completa a input singolo e output multiplo, con livelli disposti in serie e con un livello di input.

net = dlnetwork(layers,Initialize=tf) specifica se inizializzare i parametri apprendibili e di stato della rete neurale. Quando tf è 1, (true), questa sintassi è equivalente a net = dlnetwork(layers). Quando tf è 0 (false), questa sintassi è equivalente alla creazione di una rete vuota a cui poi aggiungere layers utilizzando la funzione addLayers.

Rete con input non connessi

net = dlnetwork(layers,X1,...,XN) crea una rete neurale utilizzando i livelli specificati e inizializza tutti i parametri apprendibili e di stato non impostati. Questa sintassi utilizza gli oggetti di layout dei dati della rete o gli input di esempio X1,...,XN per determinare la grandezza e il formato dei parametri apprendibili e dei valori di stato della rete neurale, dove N è il numero di input della rete.

Utilizzare questa sintassi quando layers definisce una rete neurale completa con livelli disposti in serie e con input non connessi ai livelli di input.

net = dlnetwork(layers,X1,...,XN,OutputNames=names) imposta inoltre la proprietà OutputNames.

Utilizzare questa sintassi quando layers definisce una rete neurale completa con più output, livelli disposti in serie e input non connessi ai livelli di input.

Conversione

net = dlnetwork(prunableNet) converte un oggetto TaylorPrunableNetwork in un oggetto dlnetwork rimuovendo i filtri selezionati per lo sfoltimento dai livelli convoluzionali di prunableNet e restituisce un oggetto dlnetwork compresso che presenta un minor numero di parametri apprendibili ed è di grandezza inferiore.

net = dlnetwork(mdl) converte un modello di Machine Learning Statistics and Machine Learning Toolbox™ in un oggetto dlnetwork.

Argomenti di input

espandi tutto

Livelli di rete, specificati come un array di Layer.

Il software connette i livelli in serie.

Per un elenco dei livelli di supportati, vedere List of Deep Learning Layers.

Dati di esempio o layout di dati da utilizzare per determinare la grandezza e i formati dei parametri apprendibili e di stato, specificati come oggetti dlarray formattati o oggetti networkDataLayout formattati. Il software propaga X1,...XN attraverso la rete per determinare le grandezze e i formati appropriati dei parametri apprendibili e di stato dell'oggetto dlnetwork e inizializza qualsiasi parametro apprendibile o di stato non impostato.

L'ordine di X1,...,XN deve corrispondere all'ordine dei livelli che richiedono input in layers.

Nota

L'inizializzazione automatica utilizza solo le informazioni sulla grandezza e sul formato dei dati di input. Se l'inizializzazione dipende dai valori dei dati di input, è necessario inizializzare manualmente i parametri apprendibili.

Indicatore per inizializzare i parametri apprendibili e di stato, specificato come uno di questi valori:

  • 1 (true): inizializzare i parametri apprendibili e di stato. Il software utilizza il livello di input in layers per determinare le grandezze dei parametri apprendibili e di stato.

  • 0 (false): non inizializzare i parametri apprendibili e di stato. Utilizzare questa opzione quando:

    • Si prevede di apportare ulteriori modifiche alla rete neurale. Ad esempio, quando si prevede di aggiungere o rimuovere livelli e connessioni.

    • Si utilizza la rete in un livello personalizzato e si desidera utilizzare una funzione di inizializzazione personalizzata.

La previsione della rete neurale e i loop di addestramento personalizzati richiedono una rete inizializzata. Per inizializzare una rete non inizializzata, utilizzare la funzione initialize.

Rete per lo sfoltimento utilizzando l'approssimazione di Taylor del primo ordine, specificata come oggetto TaylorPrunableNetwork.

Lo sfoltimento di una rete neurale profonda richiede il pacchetto di supporto Deep Learning Toolbox Model Quantization Library. Questo pacchetto di supporto è un prodotto complementare gratuito che si può scaricare utilizzando Add-On Explorer. In alternativa, vedere Deep Learning Toolbox Model Quantization Library.

Da R2024b

Rete neurale di classificazione o regressione, specificata come oggetto ClassificationNeuralNetwork (Statistics and Machine Learning Toolbox), RegressionNeuralNetwork (Statistics and Machine Learning Toolbox), CompactClassificationNeuralNetwork (Statistics and Machine Learning Toolbox) o CompactRegressionNeuralNetwork (Statistics and Machine Learning Toolbox).

Le funzioni fitcnet (Statistics and Machine Learning Toolbox) e fitrnet (Statistics and Machine Learning Toolbox) restituiscono rispettivamente gli oggetti ClassificationNeuralNetwork e RegressionNeuralNetwork. La funzione compact (Statistics and Machine Learning Toolbox) restituisce gli oggetti CompactClassificationNeuralNetwork e CompactRegressionNeuralNetwork.

Proprietà

espandi tutto

Livelli di rete, specificati come un array di Layer.

Connessioni dei livelli, specificati come tabella con due colonne.

Ciascuna riga della tabella rappresenta una connessione nella rete neurale. La prima colonna Source, specifica la sorgente di ciascuna connessione. La seconda colonna Destination, specifica la destinazione di ciascuna connessione. Le sorgenti e le destinazioni delle connessioni sono nomi di livelli o sono nella forma "layerName/IOName", dove "IOName" è il nome dell'input o dell'output del livello.

Tipi di dati: table

Parametri apprendibili della rete, specificati come tabella con tre colonne:

  • Layer: nome del livello, specificato come scalare di stringa.

  • Parameter: nome del parametro, specificato come scalare di stringa.

  • Value: valore del parametro, specificato come oggetto dlarray.

I parametri apprendibili della rete contengono le feature apprese dalla rete. Ad esempio, i pesi dei livelli convoluzionali e di quelli completamente connessi.

I valori dei parametri apprendibili possono essere a valore complesso (da R2024a).

Tipi di dati: table

Stato della rete, specificato come tabella.

Lo stato della rete è una tabella con tre colonne:

  • Layer: nome del livello, specificato come scalare di stringa.

  • Parameter: nome del parametro di stato, specificato come scalare di stringa.

  • Value: valore del parametro di stato, specificato come oggetto dlarray.

Gli stati del livello contengono le informazioni calcolate durante l'operazione di livello da conservare per essere utilizzate nei passaggi successivi del livello. Ad esempio, lo stato delle celle e lo stato nascosto dei livelli LSTM o le statistiche di funzionamento dei livelli di normalizzazione batch.

Per i livelli ricorrenti, come i livelli LSTM, con la proprietà HasStateInputs impostata su 1 (true), la tabella degli stati non contiene voci per gli stati di quel livello.

Durante l'addestramento o l'inferenza, è possibile aggiornare lo stato della rete utilizzando l'output delle funzioni forward e predict.

I valori dello stato possono essere a valore complesso (da R2024a).

Tipi di dati: table

Nomi degli input di rete, specificati come array di celle dei vettori di carattere.

Gli input di rete sono i livelli di input e gli input non connessi dei livelli.

Per i livelli di input e i livelli con un singolo input, il nome dell'input è il nome del livello. Per i livelli con più input, il nome dell'input è "layerName/inputName", dove layerName è il nome del livello e inputName è il nome dell'input del livello.

Per le reti con più input, le funzioni di addestramento e previsione utilizzano questa proprietà per determinare l'ordine degli input. Ad esempio, per gli input in memoria X1,...,XM alla funzione predict, l'ordine degli input deve corrispondere all'ordine degli input corrispondenti nella proprietà InputNames della rete.

Per personalizzare l'ordine, impostare InputNames sull'ordine desiderato. (da R2024b)

Prima di R2024b: Questa proprietà è in sola lettura. Adattare il codice in modo che le chiamate alla funzione predict e simili abbiano argomenti di input che corrispondono all'ordine specificato da InputNames.

Nota

Se si personalizza la proprietà InputNames e poi si apportano modifiche alla rete neurale, ad esempio aggiungendo o rimuovendo livelli, la proprietà InputNames non cambia. Questo comportamento implica che se si aggiungono o rimuovono livelli che corrispondono a input di rete, è inoltre necessario aggiornare manualmente la proprietà InputNames.

Tipi di dati: cell

Nomi degli output di rete, specificati come array di celle dei vettori di carattere.

Per i livelli con un singolo output, il nome dell'output è il nome del livello. Per i livelli con più output, il nome dell'output è "layerName/outputName", dove layerName è il nome del livello e outputName è il nome dell'output del livello.

Se non si specificano i nomi degli output, quando si crea la rete il software imposta la proprietà OutputNames sui livelli con output non connessi.

Per le reti con più output, le funzioni di addestramento e previsione utilizzano questa proprietà per determinare l'ordine degli output. Ad esempio, gli output Y1,...,YN della funzione predict corrispondono agli output specificati dalla proprietà OutputNames della rete.

Nota

Se si personalizza la proprietà OutputNames e poi si apportano modifiche alla rete neurale, ad esempio aggiungendo o rimuovendo livelli, la proprietà OutputNames non cambia. Questo comportamento implica che se si aggiungono o rimuovono livelli che corrispondono a output di rete, è inoltre necessario aggiornare manualmente la proprietà OutputNames.

Tipi di dati: cell

proprietà è di sola lettura.

Indicatore per la rete inizializzata, specificato come uno di questi valori:

  • 1 (true): la rete è inizializzata ed è pronta per la previsione e per i loop di addestramento personalizzati. Se si modificano i valori dei parametri apprendibili o di stato, la rete rimane inizializzata.

  • 0 (false): la rete non è inizializzata e non è pronta per la previsione o per i loop di addestramento personalizzati. Per inizializzare una rete non inizializzata, utilizzare la funzione initialize.

Tipi di dati: logical

Funzioni oggetto

addInputLayerAdd input layer to network
addLayersAdd layers to neural network
removeLayersRemove layers from neural network
connectLayersConnect layers in neural network
disconnectLayersDisconnect layers in neural network
replaceLayerReplace layer in neural network
getLayerLook up a layer by name or path
expandLayersExpand network layers
groupLayersGroup layers into network layers
summaryStampare il riepilogo della rete
plotTracciare l'architettura della rete neurale
initializeInitialize learnable and state parameters of neural network
predictCompute deep learning network output for inference
forwardCompute deep learning network output for training
resetStateReset state parameters of neural network
setL2FactorSet L2 regularization factor of layer learnable parameter
setLearnRateFactorSet learn rate factor of layer learnable parameter
getLearnRateFactorGet learn rate factor of layer learnable parameter
getL2FactorGet L2 regularization factor of layer learnable parameter

Esempi

comprimi tutto

Definire una rete neurale a due output che preveda sia etichette categoriche che valori numerici sulla base di input in forma di immagini bidimensionali.

Specificare il numero di classi e di risposte.

numClasses = 10;
numResponses = 1;

Creare una rete neurale vuota.

net = dlnetwork;

Definire i livelli del ramo principale della rete e l'output softmax.

layers = [
    imageInputLayer([28 28 1],Normalization="none")

    convolution2dLayer(5,16,Padding="same")
    batchNormalizationLayer
    reluLayer(Name="relu_1")

    convolution2dLayer(3,32,Padding="same",Stride=2)
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer

    additionLayer(2,Name="add")

    fullyConnectedLayer(numClasses)
    softmaxLayer(Name="softmax")];

net = addLayers(net,layers);

Aggiungere il collegamento di salto.

layers = [
    convolution2dLayer(1,32,Stride=2,Name="conv_skip")
    batchNormalizationLayer
    reluLayer(Name="relu_skip")];

net = addLayers(net,layers);
net = connectLayers(net,"relu_1","conv_skip");
net = connectLayers(net,"relu_skip","add/in2");

Aggiungere il livello completamente connesso per l'output della regressione.

layers = fullyConnectedLayer(numResponses,Name="fc_2");
net = addLayers(net,layers);
net = connectLayers(net,"add","fc_2");

Visualizzare la rete neurale in un grafico.

figure
plot(net)

Figure contains an axes object. The axes object contains an object of type graphplot.

Se si dispone di un livello che definisce una rete neurale completa a input singolo, con livelli disposti in serie e un livello di input, è possibile convertire direttamente l'array di livelli in un oggetto dlnetwork.

Specificare una rete LSTM come array di livelli.

layers = [
    sequenceInputLayer(12)
    lstmLayer(100)
    fullyConnectedLayer(9)
    softmaxLayer];

Convertire l'array di livelli in un oggetto dlnetwork. Poiché l'array di livelli contiene un livello di input e nessun altro input, il software inizializza la rete neurale.

net = dlnetwork(layers)
net = 
  dlnetwork with properties:

         Layers: [4x1 nnet.cnn.layer.Layer]
    Connections: [3x2 table]
     Learnables: [5x3 table]
          State: [2x3 table]
     InputNames: {'sequenceinput'}
    OutputNames: {'softmax'}
    Initialized: 1

  View summary with summary.

Caricare una rete preaddestrata.

net = imagePretrainedNetwork;

La proprietà Learnables dell'oggetto dlnetwork è una tabella che contiene i parametri apprendibili della rete. La tabella include i parametri dei livelli annidati in righe separate. Visualizzare le prime righe della tabella dei parametri apprendibili.

learnables = net.Learnables;
head(learnables)
          Layer           Parameter           Value       
    __________________    _________    ___________________

    "conv1"               "Weights"    {3x3x3x64  dlarray}
    "conv1"               "Bias"       {1x1x64    dlarray}
    "fire2-squeeze1x1"    "Weights"    {1x1x64x16 dlarray}
    "fire2-squeeze1x1"    "Bias"       {1x1x16    dlarray}
    "fire2-expand1x1"     "Weights"    {1x1x16x64 dlarray}
    "fire2-expand1x1"     "Bias"       {1x1x64    dlarray}
    "fire2-expand3x3"     "Weights"    {3x3x16x64 dlarray}
    "fire2-expand3x3"     "Bias"       {1x1x64    dlarray}

Per congelare i parametri apprendibili della rete, eseguire il loop dei parametri apprendibili e impostare la velocità di apprendimento su 0 utilizzando la funzione setLearnRateFactor.

factor = 0;

numLearnables = size(learnables,1);
for i = 1:numLearnables
    layerName = learnables.Layer(i);
    parameterName = learnables.Parameter(i);
    
    net = setLearnRateFactor(net,layerName,parameterName,factor);
end

Per utilizzare i fattori della velocità di apprendimento aggiornati durante l'addestramento, è necessario passare l'oggetto dlnetwork alla funzione di aggiornamento nel loop di addestramento personalizzato. Ad esempio, utilizzare il comando

[net,velocity] = sgdmupdate(net,gradients,velocity);

Funzionalità estese

espandi tutto

Cronologia versioni

Introdotto in R2019b

espandi tutto