2017-08-10 487 views
0

我想弄清楚這整個機器學習的東西,所以我正在做一些測試。我想讓它學習竇功能(用弧度角度)。該神經網絡是:使用ReLu機器學習返回NaN

1輸入(弧度角)/ 2個隱藏層/ 1輸出(竇的預測)

對於壁球激活我使用:RELU並注意到這一點很重要當我使用Logistic函數而不是RELU時,腳本正在工作。所以要做到這一點,我已經做了一個循環,開始於0,並在180結束,它將翻譯弧度(弧度= loop_index * Math.PI/180)的數字,然後它將基本上做這個弧度角的正弦,並存儲弧度和正弦結果。

所以,我的表是這樣的一個條目:{輸入:[RADIAN ANGLE],輸出:[罪(弧度)]}

for(var i = 0; i <= 180; i++) { 
    radian = (i*(Math.PI/180)); 
    train_table.push({input:[radian],output:[Math.sin(radian)]}) 
} 

我用這個表來訓練使用過我的神經網絡Entropy,學習率爲0.3,迭代次數爲20000次。

的問題是,它失敗了,當我試圖預測任何事情,它返回「南」

我使用的框架突觸(https://github.com/cazala/synaptic)這裏是我的代碼的jsfiddle:https://jsfiddle.net/my7xe9ks/2/

+0

你需要分享完整的代碼,而不僅僅是這部分,這似乎毫不相關恕我直言。 –

+0

添加語言標籤可能會有所幫助。那是JavaScript?你在使用哪個庫?你如何計算交叉熵? –

+0

我使用JavaScript使用此框架:https://github.com/cazala/synaptic,這裏是我的代碼jsfiddle:https://jsfiddle.net/my7xe9ks/2/ – Raphael

回答

0

一學習率必須仔細調整,這個參數很重要,特別是當梯度爆炸,你​​得到一個南。發生這種情況時,您必須降低學習率,通常爲10倍。

在您的具體情況下,如果您使用0.05或0.01的網絡,學習率過高,現在可以訓練並正常工作。

另一個重要的細節是,您使用交叉熵作爲損失,此損失用於分類,並且您有迴歸問題。您應該更喜歡均值平方誤差損失。

+0

感謝您的回答,有沒有什麼方法可以確定學習速度,還是我必須手動調整它,並等待獲得完美的結果? – Raphael

+0

@Raphael它必須手動調整,但有像Adagrad,ADAM和RMSProp這樣的優化器可以在訓練過程中自動縮放學習率。 –

+0

當您使用MSE(均方根誤差)時,您建議結果在某個時間完全錯誤。我使用0.005的學習率(並嘗試了其他學習速度,但它也是這樣做的),這裏是jsfiddle:https://jsfiddle.net/my7xe9ks/4/你有什麼可能導致這種情況的想法嗎? – Raphael