2015-10-29 35 views
0

我正在使用用C++編寫的神經網絡庫(稱爲FANN)嘗試學習和預測數學序列。它使用庫的包裝器與Node.js一起實現。在這個特殊的例子中,我試圖讓神經網絡通過給出位置作爲輸入和數值作爲輸出來學習斐波那契數列。我的網絡代碼如下:爲什麼我的神經網絡爲正輸入提供負輸出?

// This neural network calculates the fibonacci sequence 
var net = new fanntom.standard(1,3,1); 

var data = [ 
    [[0], [0]], 
    [[1], [1]], 
    [[2], [1]], 
    [[3], [2]], 
    [[4], [3]], 
    [[5], [5]], 
    [[6], [8]], 
    [[7], [13]], 
    [[8], [21]], 
    [[9], [34]] 
] 

net.activation_function_hidden('FANN_LINEAR'); 
net.activation_function_output('FANN_LINEAR'); 
net.train(data, { error: 0.00001 }) 

;[0,1,2,3,4,5,6,7,8,9].forEach(function(a) { 
    var c = net.run([a]); 
    console.log("fibonacci sequence position " + a + " -> " + c) 
}) 

這裏是輸出樣本我接收:

Max epochs 100000. Desired error: 0.0000100000. 
Epochs   1. Current error: 187.3569030762. Bit fail 9. 
Epochs   1000. Current error: 34.0731391907. Bit fail 8. 
Epochs   2000. Current error: 34.0791511536. Bit fail 8. 
Epochs   3000. Current error: 34.0858230591. Bit fail 8. 
Epochs   4000. Current error: 34.0767517090. Bit fail 8. 
Epochs   5000. Current error: 34.0764961243. Bit fail 8. 
Epochs   6000. Current error: 34.0817642212. Bit fail 8. 
Epochs   7000. Current error: 34.0817031860. Bit fail 8. 
Epochs   8000. Current error: 34.0721969604. Bit fail 8. 
Epochs   9000. Current error: 34.0795860291. Bit fail 8. 
Epochs  10000. Current error: 34.0741653442. Bit fail 8. 
Epochs  11000. Current error: 34.0833320618. Bit fail 8. 
Epochs  12000. Current error: 34.0826034546. Bit fail 8. 
Epochs  13000. Current error: 34.0909080505. Bit fail 8. 
Epochs  14000. Current error: 34.0811843872. Bit fail 8. 
Epochs  15000. Current error: 34.0729255676. Bit fail 8. 
Epochs  16000. Current error: 34.0812034607. Bit fail 8. 
Epochs  17000. Current error: 34.0855636597. Bit fail 8. 
Epochs  18000. Current error: 34.0725784302. Bit fail 8. 
Epochs  19000. Current error: 34.0898971558. Bit fail 8. 
Epochs  20000. Current error: 34.0742073059. Bit fail 8. 
Epochs  21000. Current error: 34.0820236206. Bit fail 8. 
Epochs  22000. Current error: 34.0867233276. Bit fail 8. 
Epochs  23000. Current error: 34.0676040649. Bit fail 8. 
Epochs  24000. Current error: 34.0834121704. Bit fail 8. 
Epochs  25000. Current error: 34.0862617493. Bit fail 8. 
Epochs  26000. Current error: 34.0691108704. Bit fail 8. 
Epochs  27000. Current error: 34.0897636414. Bit fail 8. 
Epochs  28000. Current error: 34.0828247070. Bit fail 8. 
Epochs  29000. Current error: 34.0744514465. Bit fail 8. 
Epochs  30000. Current error: 34.0876007080. Bit fail 8. 
Epochs  31000. Current error: 34.0852851868. Bit fail 8. 
Epochs  32000. Current error: 34.0892257690. Bit fail 8. 
Epochs  33000. Current error: 34.0835494995. Bit fail 8. 
Epochs  34000. Current error: 34.0838394165. Bit fail 8. 
Epochs  35000. Current error: 34.0851097107. Bit fail 8. 
Epochs  36000. Current error: 34.0754585266. Bit fail 8. 
Epochs  37000. Current error: 34.0893363953. Bit fail 8. 
Epochs  38000. Current error: 34.0729141235. Bit fail 8. 
Epochs  39000. Current error: 34.0780258179. Bit fail 8. 
Epochs  40000. Current error: 34.0776443481. Bit fail 8. 
Epochs  41000. Current error: 34.0812759399. Bit fail 8. 
Epochs  42000. Current error: 34.0707893372. Bit fail 8. 
Epochs  43000. Current error: 34.0810317993. Bit fail 8. 
Epochs  44000. Current error: 34.0846099854. Bit fail 8. 
Epochs  45000. Current error: 34.0794601440. Bit fail 8. 
Epochs  46000. Current error: 34.0818710327. Bit fail 8. 
Epochs  47000. Current error: 34.0692596436. Bit fail 8. 
Epochs  48000. Current error: 34.0687141418. Bit fail 8. 
Epochs  49000. Current error: 34.0702171326. Bit fail 8. 
Epochs  50000. Current error: 34.0730400085. Bit fail 8. 
Epochs  51000. Current error: 34.0896568298. Bit fail 8. 
Epochs  52000. Current error: 34.0715599060. Bit fail 8. 
Epochs  53000. Current error: 34.0734481812. Bit fail 8. 
Epochs  54000. Current error: 34.0772285461. Bit fail 8. 
Epochs  55000. Current error: 34.0646171570. Bit fail 8. 
Epochs  56000. Current error: 34.0669212341. Bit fail 8. 
Epochs  57000. Current error: 34.0733718872. Bit fail 8. 
Epochs  58000. Current error: 34.0881729126. Bit fail 8. 
Epochs  59000. Current error: 34.0861282349. Bit fail 8. 
Epochs  60000. Current error: 34.0846023560. Bit fail 8. 
Epochs  61000. Current error: 34.0738449097. Bit fail 8. 
Epochs  62000. Current error: 34.0877456665. Bit fail 8. 
Epochs  63000. Current error: 34.0803222656. Bit fail 8. 
Epochs  64000. Current error: 34.0794219971. Bit fail 8. 
Epochs  65000. Current error: 34.0926132202. Bit fail 8. 
Epochs  66000. Current error: 34.0831146240. Bit fail 8. 
Epochs  67000. Current error: 34.0780830383. Bit fail 8. 
Epochs  68000. Current error: 34.0757255554. Bit fail 8. 
Epochs  69000. Current error: 34.0820083618. Bit fail 8. 
Epochs  70000. Current error: 34.0746269226. Bit fail 8. 
Epochs  71000. Current error: 34.0959663391. Bit fail 8. 
Epochs  72000. Current error: 34.0699691772. Bit fail 8. 
Epochs  73000. Current error: 34.0816230774. Bit fail 8. 
Epochs  74000. Current error: 34.0853195190. Bit fail 8. 
Epochs  75000. Current error: 34.0910835266. Bit fail 8. 
Epochs  76000. Current error: 34.0766525269. Bit fail 8. 
Epochs  77000. Current error: 34.0885848999. Bit fail 8. 
Epochs  78000. Current error: 34.0684432983. Bit fail 8. 
Epochs  79000. Current error: 34.0836944580. Bit fail 8. 
Epochs  80000. Current error: 34.0931396484. Bit fail 8. 
Epochs  81000. Current error: 34.0903816223. Bit fail 8. 
Epochs  82000. Current error: 34.0796318054. Bit fail 8. 
Epochs  83000. Current error: 34.0709342957. Bit fail 8. 
Epochs  84000. Current error: 34.0812988281. Bit fail 8. 
Epochs  85000. Current error: 34.0859451294. Bit fail 8. 
Epochs  86000. Current error: 34.0641326904. Bit fail 8. 
Epochs  87000. Current error: 34.0925521851. Bit fail 8. 
Epochs  88000. Current error: 34.0828132629. Bit fail 8. 
Epochs  89000. Current error: 34.0705337524. Bit fail 8. 
Epochs  90000. Current error: 34.0698318481. Bit fail 8. 
Epochs  91000. Current error: 34.0850410461. Bit fail 8. 
Epochs  92000. Current error: 34.0921783447. Bit fail 8. 
Epochs  93000. Current error: 34.0679855347. Bit fail 8. 
Epochs  94000. Current error: 34.0932426453. Bit fail 8. 
Epochs  95000. Current error: 34.0735969543. Bit fail 8. 
Epochs  96000. Current error: 34.0687332153. Bit fail 8. 
Epochs  97000. Current error: 34.0628662109. Bit fail 8. 
Epochs  98000. Current error: 34.0813598633. Bit fail 8. 
Epochs  99000. Current error: 34.0901985168. Bit fail 8. 
Epochs  100000. Current error: 34.0652198792. Bit fail 8. 
fibonacci sequence position 0 -> -3.7995970795170027 
fibonacci sequence position 1 -> -1.3996559488192886 
fibonacci sequence position 2 -> 1.0002851818784273 
fibonacci sequence position 3 -> 3.4002263125761414 
fibonacci sequence position 4 -> 5.800167443273858 
fibonacci sequence position 5 -> 8.200108573971574 
fibonacci sequence position 6 -> 10.60004970466929 
fibonacci sequence position 7 -> 12.999990835367003 
fibonacci sequence position 8 -> 15.39993196606472 
fibonacci sequence position 9 -> 17.799873096762436 

我的問題是,如何能神經網絡產生負輸出,如果所有的輸入都正?此外,爲什麼錯誤如此之大,特別是對於第一個時代?

回答

1

輸出可能是負數,因爲它是輸入,權重和傳遞函數的組合。權重隨機初始化爲平均值0,因此其中約一半爲負值。而且,由於它們是隨機初始化的,因此您希望在第一次訓練之前發生巨大的錯誤。這實際上是一種猜測。

順便說一句,你的錯誤在1000次迭代後穩定下來。考慮到問題域的大小,它可能在50次迭代後穩定下來。你可能花費了2000倍以上的時間。