2012-04-11 35 views
6

Po dokumentacji PyBrain, buduję sieć neuronową w części (w przeciwieństwie do skrótu buildNetwork). Buduję prostą 3-warstwową (wejściową, ukrytą, wyjściową) sieć neuronową. Jak prawidłowo dodać jednostkę stronniczości?PyBrain: Kiedy tworzysz sieć od podstaw, jak i gdzie tworzysz odchylenie?

Zgaduję skonstruować moduł BiasUnit jak w:

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

Czy to właściwa droga? Czy muszę utworzyć obiekt FullConnection? Jeśli tak, to co powinienem łączyć?

+0

Tak samo jak uwielbiam Pythona, przerzuciłem się na używanie [fanntool] opartego na C (http://code.google.com/p/fanntool/), który wysysa PyBrain z wody pod względem wydajności . – User

Odpowiedz

10

Zrealizowane PyBrain jest open source i mam kod źródłowy siedzi w moim katalogu Python. Otworzyłem plik C: \ Python27 \ Lib \ site-packages \ pybrain \ tools \ shortcuts.py. Wewnątrz tego pliku zlokalizowałem funkcję buildNetwork i zobaczyłem, jak dodaje ona BiasUnit. Odpowiedni kod jest tutaj:

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

Zasadniczo wygląda to tworzy jeden BiasUnit i łączy go z każdej warstwie ukrytej oraz ewentualnie do warstwy wyjściowej, jak również.

+0

Dobra robota detektywistyczna. Zauważ, że buildNetwork jest tylko skrótem iw dokumentacji API omawiają budowę sieci (patrz dokumenty dla sieci) –

1

Tutaj masz 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() 

Należy pamiętać, że BiasUnit jest podłączony do TanhLayer efektywnego wytwarzania warstwy h warstwą z uprzedzeń.

Powiązane problemy