2015-09-05 45 views
0

看到this answer後,我在導出網絡時遇到了一些麻煩。這裏是網絡生成的代碼:導出網絡的Pybrain

net = buildNetwork(2, 1, 1, bias=False) 
sol = net.activate([2,3]) 
print("solution", sol) 

for mod in net.modules: 
    for conn in net.connections[mod]: 
     print("connection:",conn) 
     for cc in range(len(conn.params)): 
      print(conn.whichBuffers(cc), conn.params[cc]) 

輸出:

solution [ 0.12654066] 
connection: <FullConnection 'FullConnection-3': 'hidden0' -> 'out'> 
(0, 0) 1.02869832075 
connection: <FullConnection 'FullConnection-4': 'in' -> 'hidden0'> 
(0, 0) 0.410307885215 
(1, 0) -0.928280457049 

不應認爲它踢出該解決方案爲等於

(0.410307885215*2-0.928280457049*3)*1.02869832075 

其爲-2.0206,和不0.12654066

回答

0

好吧,所以我忘記了激活功能。默認激活函數是S型函數,這在Python中,你可以用

from scipy.special import expit 
expit((0.410307885215*2-0.928280457049*3))*1.02869832075 = 0.1265406616438563 

對我來說是如何添加偏置接下來的問題很容易做到。在運行sigmoid函數之前添加偏差。所以,如果你正在做的:

net = buildNetwork(2, 1, 1, bias=True) 

然後它基本上是建立:

expit(weight_in1*input1+weight_in2*input2+hidden_bias)*hidden_weight+bias_out 

希望這是有道理的,以具有相同的問題我的人。