======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====== - creare la rete (costruttore) - creare i layer (costruttore specificando: n. percettroni e funzione attivazione) - aggiungere i //moduli// alla rete a partire dai layer (segnando quali sono di input o di output) - creare le connessioni tra percettroni i diversi moduli (esempio: [[neurali:fully connected]]) - aggiungere le //connessioni// alla rete - ordinare i moduli - (i pesi sono inizialmente posti random?) - attivazione (fornisci un input, ottieni un output) Tutti i seguenti hanno nome iniziale maiuscola: sono costruttori: - FeedForwardNetwork - LinearLayer (vedere perché usare [[neurali:funzione attivazione linear]] - SigmoidLayer ((vedere perché usare [[neurali:funzione attivazione logistic sigmoid]] - FullConnection import pybrain.structure n = pybrain.structure.FeedForwardNetwork() layerInput = pybrain.structure.LinearLayer(2) layerNasocosto = pybrain.structure.SigmoidLayer(3) layerOutput = pybrain.structure.LinearLayer(1) {{ :neurali:pybrain-tut1.png?nolink&200 |}} 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 {{ :neurali:pybrain-tut2.png?nolink&200 |}} print n # stampa i _nomi_ degli elementi, che non sono stati definiti, quindi sono random Output FeedForwardNetwork-6 Modules: [, , ] Connections: [ '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) {{ :neurali:pybrain-tut3.png?nolink&200 |}} 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