2012-04-11 10 views
6

Siguiendo la documentación PyBrain, Building Networks with Modules and Connections, estoy construyendo una red neuronal por partes (en contraste con el uso del acceso directo buildNetwork). Estoy construyendo una red neuronal simple de 3 capas (entrada, oculta, salida). ¿Cómo agrego correctamente una unidad de polarización?PyBrain: cuando se crea una red desde cero, ¿cómo y dónde se crea un sesgo?

Supongo construyo un módulo BiasUnit como en:

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

¿Es este el camino correcto? ¿Tengo que crear el objeto FullConnection? Si es así, ¿a qué me debería conectar?

+0

Por mucho que me guste Python, he cambiado a usar la [fanntool] basada en C (http://code.google.com/p/fanntool/) que saca a PyBrain del agua en términos de rendimiento . – User

Respuesta

10

Realizado PyBrain es de código abierto y tengo el código fuente en mi directorio de Python. Abrí el archivo C: \ Python27 \ Lib \ site-packages \ pybrain \ tools \ shortcuts.py. Dentro de este archivo ubiqué la función buildNetwork y vi cómo se agrega BiasUnit. El código en cuestión está aquí:

... 
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 
... 

Básicamente parece que se crea un único BiasUnit y lo conecta a cada capa oculta y, opcionalmente, a la capa de salida también.

+0

Buen trabajo de detective. Tenga en cuenta que buildNetwork es solo un acceso directo y en la documentación de la API se discute sobre la construcción de una red (consulte los documentos de Network) –

1

Aquí tienes una 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() 

Tenga en cuenta que la BiasUnit está conectado a TanhLayer efectivamente hacer la capa h una capa con sesgo.

Cuestiones relacionadas