User Tools

Site Tools


neurali:pybrain_costruire_una_rete

Costruire una rete

In questo tutorial vengono utilizzate delle funzioni matematiche python, come:

  • numpy.random.multivariate_normal (funzione gaussiana)
  • numpy.diag
    • permette di costruire un'array diagonale oppure di estrarre la diagonale da un array
  • range
    • For example, range(4) returns [0, 1, 2, 3].
  • xrange
    • Like range(), but instead of returning a list, returns an object that generates the numbers in the range on demand
  • numpy.arange
    • Like range(), but instead of returning a list, returns an ndarray

classe FeedForwardNetwork

  1. creare la rete (costruttore)
  2. creare i layer (costruttore specificando: n. percettroni e funzione attivazione)
  3. aggiungere i moduli alla rete a partire dai layer (segnando quali sono di input o di output)
  4. creare le connessioni tra percettroni i diversi moduli (esempio: fully connected)
  5. aggiungere le connessioni alla rete
  6. ordinare i moduli
  7. (i pesi sono inizialmente posti random?)
  8. attivazione (fornisci un input, ottieni un output)

Tutti i seguenti hanno nome iniziale maiuscola: sono costruttori:

  1. FeedForwardNetwork
  2. LinearLayer (vedere perché usare funzione attivazione linear
  3. SigmoidLayer ((vedere perché usare funzione attivazione logistic sigmoid
  4. FullConnection
  import pybrain.structure
  n = pybrain.structure.FeedForwardNetwork()
 
  layerInput = pybrain.structure.LinearLayer(2)
  layerNasocosto = pybrain.structure.SigmoidLayer(3)
  layerOutput = pybrain.structure.LinearLayer(1)

In alternativa, si potrebbe specificare anche il nome del layer

layerInput = pybrain.structure.LinearLayer(2), name="prova")
  n.addInputModule(layerInput)
  n.addModule(layerNascosto)
  n.addOutputModule(layerOutput)
 
 
  in_to_hidden = pybrain.structure.connections.full.FullConnection(layerInput, layerNascosto)
  hidden_to_out = pybrain.structure.connections.full.FullConnection(layerNascosto,layerOutput)
 
 
  n.addConnection(in_to_hidden)
  n.addConnection(hidden_to_out)
 
  n.sortModules()  # importante

  print n # stampa i _nomi_ degli elementi, che non sono stati definiti, quindi sono random

Output

 
FeedForwardNetwork-6
 Modules:
    [<LinearLayer 'LinearLayer-3'>, 
     <SigmoidLayer 'SigmoidLayer-7'>, 
     <LinearLayer 'LinearLayer-8'>]
 Connections:
    [<FullConnection 'FullConnection-4': 'LinearLayer-3' -> 'SigmoidLayer-7'>, 
     <FullConnection 'FullConnection-5': 'SigmoidLayer-7' -> 'LinearLayer-8'>]

In alternativa esiste una funzione scorciatoia

import buildNetwork
net = buildNetwork(2, 3, 1)

Questa istruzione esegue la funzione di rete fornendo in input la coppia (1,2)

  print n.activate([1, 2])   # stampa output rete (un valore scalare in questo esempio)

L'output sarà sempre diverso, anche fornendo in input sempre la stessa coppia (1,2) perché ogni volta che si crea la rete, i pesi delle connessioni sono inizializzati random. Se si desidera visualizzare tali pesi, si usa il comando

  print n.params   # stampa i pesi delle connessioni (9 linee in nero nella figura)

Esempio di output dei due precedenti comandi

[-2.3085972]
 
[-0.62274409 
 -0.39921839 
 -0.23909193 
  1.00736063
 -1.24427458 
  1.06840813
 -0.47068614
 -0.53789443
 -2.47679769]
print in_to_hidden.params # mostra solo i pesi delle prime 6 connessioni
 
neurali/pybrain_costruire_una_rete.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1