Contenuto principale

Creazione dell'oggetto di rete neurale

Questo argomento fa parte del workflow di progettazione descritto in Workflow per la progettazione delle reti neurali.

Il modo più semplice per creare una rete neurale è utilizzare una delle funzioni di creazione della rete. Per analizzare come si realizza, è possibile creare una rete feed-forward semplice a due livelli, utilizzando il comando feedforwardnet:

net = feedforwardnet
net =

Neural Network

              name: 'Feed-Forward Neural Network'
          userdata: (your custom info)

    dimensions:

         numInputs: 1
         numLayers: 2
        numOutputs: 1
    numInputDelays: 0
    numLayerDelays: 0
 numFeedbackDelays: 0
 numWeightElements: 10
        sampleTime: 1

    connections:

       biasConnect: [1; 1]
      inputConnect: [1; 0]
      layerConnect: [0 0; 1 0]
     outputConnect: [0 1]

    subobjects:

            inputs: {1x1 cell array of 1 input}
            layers: {2x1 cell array of 2 layers}
           outputs: {1x2 cell array of 1 output}
            biases: {2x1 cell array of 2 biases}
      inputWeights: {2x1 cell array of 1 weight}
      layerWeights: {2x2 cell array of 1 weight}

    functions:

          adaptFcn: 'adaptwb'
        adaptParam: (none)
          derivFcn: 'defaultderiv'
         divideFcn: 'dividerand'
       divideParam: .trainRatio, .valRatio, .testRatio
        divideMode: 'sample'
           initFcn: 'initlay'
        performFcn: 'mse'
      performParam: .regularization, .normalization
          plotFcns: {'plotperform', plottrainstate, ploterrhist,
                    plotregression}
        plotParams: {1x4 cell array of 4 params}
          trainFcn: 'trainlm'
        trainParam: .showWindow, .showCommandLine, .show, .epochs,
                    .time, .goal, .min_grad, .max_fail, .mu, .mu_dec,
                    .mu_inc, .mu_max

    weight and bias values:

                IW: {2x1 cell} containing 1 input weight matrix
                LW: {2x2 cell} containing 1 layer weight matrix
                 b: {2x1 cell} containing 2 bias vectors

    methods:

             adapt: Learn while in continuous use
         configure: Configure inputs & outputs
            gensim: Generate Simulink model
              init: Initialize weights & biases
           perform: Calculate performance
               sim: Evaluate network outputs given inputs
             train: Train network with examples
              view: View diagram
       unconfigure: Unconfigure inputs & outputs

    evaluate:       outputs = net(inputs)

Questa visualizzazione è una panoramica dell'oggetto di rete, utilizzato per memorizzare tutte le informazioni che definiscono una rete neurale. Sono presenti molti dettagli, ma alcune sezioni chiave possono aiutare a capire come è organizzato l'oggetto di rete.

La sezione delle dimensioni memorizza la struttura complessiva della rete. Qui si può vedere che è presente un input di rete (anche se l'input può essere un vettore contenente molti elementi), un output di rete e due livelli.

La sezione connessioni memorizza le connessioni tra i componenti della rete. Ad esempio, a ciascun livello è connesso un bias, l'input è collegato al livello 1 e l'output proviene dal livello 2. Si può inoltre notare che il livello 1 è connesso al livello 2. (Le righe di net.layerConnect rappresentano il livello di destinazione, mentre le colonne rappresentano il livello di sorgente. La presenza di un uno in questa matrice indica una connessione, mentre la presenza di uno zero indica l'assenza di connessione. In questo esempio, è presente un singolo uno nell'elemento 2,1 della matrice).

Gli oggetti secondari chiave dell'oggetto di rete sono inputs, layers, outputs, biases, inputWeights e layerWeights. Visualizzare l'oggetto secondario layers per il primo livello con il comando

net.layers{1}
Neural Network Layer

              name: 'Hidden'
        dimensions: 10
       distanceFcn: (none)
     distanceParam: (none)
         distances: []
           initFcn: 'initnw'
       netInputFcn: 'netsum'
     netInputParam: (none)
         positions: []
             range: [10x2 double]
              size: 10
       topologyFcn: (none)
       transferFcn: 'tansig'
     transferParam: (none)
          userdata: (your custom info)

Il numero di neuroni di un livello è dato dalla sua proprietà size. In questo caso, il livello ha 10 neuroni, ossia la grandezza predefinita per il comando feedforwardnet. La funzione di input net è netsum (sommatoria) e la funzione di trasferimento è tansig. Se si desidera modificare la funzione di trasferimento in logsig, ad esempio, è possibile eseguire il comando:

net.layers{1}.transferFcn = 'logsig';

Per visualizzare l'oggetto secondario layerWeights per il peso tra il livello 1 e il livello 2, utilizzare il comando:

net.layerWeights{2,1}
Neural Network Weight

            delays: 0
           initFcn: (none)
        initConfig: .inputSize
             learn: true
          learnFcn: 'learngdm'
        learnParam: .lr, .mc
              size: [0 10]
         weightFcn: 'dotprod'
       weightParam: (none)
          userdata: (your custom info)

La funzione di peso è dotprod, che rappresenta la moltiplicazione matriciale standard (prodotto interno). Si noti che la grandezza del peso di questo livello è di 0x10. Il motivo per cui si hanno zero righe dipende dal fatto che la rete non è ancora stata configurata per un particolare set di dati. Il numero di neuroni di output corrisponde al numero di righe del vettore target. Durante il processo di configurazione, fornire alla rete esempi di input e di target, per poter poi assegnare il numero di neuroni di output.

Questo fornisce un'idea di come è organizzato l'oggetto di rete. Per molte applicazioni, non è necessario preoccuparsi di dover apportare modifiche direttamente all'oggetto di rete, in quanto questo compito è svolto dalle funzioni di creazione della rete. Di solito è necessario accedere direttamente all'oggetto di rete solo quando si desidera sovrascrivere le impostazioni predefinite del sistema. Altri argomenti mostreranno come questo venga realizzato per particolari reti e metodi di addestramento.

Per analizzare l'oggetto di rete in modo più dettagliato, si noti che gli elenchi degli oggetti, come quello mostrato sopra, contengono collegamenti alla guida di ciascun oggetto secondario. Facendo clic sui collegamenti, è possibile analizzare in modo selettivo le parti dell'oggetto di interesse.