2012-04-11 14 views
6

In seguito alla documentazione PyBrain, Building Networks with Modules and Connections, sto costruendo una rete neurale a tratti (a differenza dell'utilizzo della scorciatoia buildNetwork). Sto costruendo una semplice rete neurale a 3 strati (input, hidden, output). Come aggiungo correttamente un'unità di pregiudizio?PyBrain: quando si crea una rete da zero come e dove si crea un pregiudizio?

Sto indovinando costruisco un modulo BiasUnit come in:

b = BiasUnit(name='bias') 
network.addModule(b) 

È questo il modo giusto? Devo creare l'oggetto FullConnection? In tal caso, cosa dovrei collegare?

+0

Per quanto ami Python, sono passato a utilizzare il [fanntool] basato su C (http://code.google.com/p/fanntool/) che fa uscire PyBrain dall'acqua in termini di prestazioni . – User

risposta

10

Realizzato PyBrain è open source e ho il codice sorgente seduto nella mia directory Python. Ho aperto il file C: \ Python27 \ Lib \ site-packages \ pybrain \ tools \ shortcuts.py. All'interno di questo file ho individuato la funzione buildNetwork e ho visto come aggiunge BiasUnit. Il codice relativo è qui:

... 
n = Network() 
# linear input layer 
n.addInputModule(LinearLayer(layers[0], name='in')) 
# output layer of type 'outclass' 
n.addOutputModule(opt['outclass'](layers[-1], name='out')) 
if opt['bias']: 
    # add bias module and connection to out module, if desired 
    n.addModule(BiasUnit(name='bias')) 
    if opt['outputbias']: 
     n.addConnection(FullConnection(n['bias'], n['out'])) 
# arbitrary number of hidden layers of type 'hiddenclass' 
for i, num in enumerate(layers[1:-1]): 
    layername = 'hidden%i' % i 
    n.addModule(opt['hiddenclass'](num, name=layername)) 
    if opt['bias']: 
     # also connect all the layers with the bias 
     n.addConnection(FullConnection(n['bias'], n[layername])) 
# connections between hidden layers 
... 

Fondamentalmente sembra che crea un unico BiasUnit e lo collega ad ogni strato nascosto e opzionalmente allo strato di output pure.

+0

Buon lavoro investigativo. Nota che buildNetwork è solo una scorciatoia e nella documentazione dell'API discutono sulla costruzione di una rete (guarda i documenti per la rete) –

1

Qui avete un simple example:

n = RecurrentNetwork() 
n.addModule(TanhLayer(hsize, name = 'h')) 
n.addModule(BiasUnit(name = 'bias')) 
n.addOutputModule(LinearLayer(1, name = 'out')) 
n.addConnection(FullConnection(n['bias'], n['h'])) 
n.addConnection(FullConnection(n['h'], n['out'])) 
n.sortModules() 

Si noti che il BiasUnit è collegato a TanhLayer fatto rendendo lo strato h uno strato di pregiudizi.