2017-08-10 7 views
0

私はこの機械学習のすべてを理解しようとしているので、いくつかのテストを行っていました。私はそれにsinus関数(ラジアンの角度)を学ばせたいと思っていました。ニューラルネットワークは、次のとおりです。RELUをし、それが注意することが重要です。ReLu return NaNを使用した機械学習

1入力(ラジアン角度)/ 2隠された層/ 1出力(洞の予測)

スカッシュ活性化のために私が使用しています私がRELUの代わりにロジスティック関数を使用していたときにスクリプトが動作していたことを示しています。

これを行うには、0から開始して180で終了するループを作成し、ラジアン(radian = loop_index * Math.PI/180)の数値を変換します。このラジアン角の副鼻腔を開き、ラジアンおよび副鼻腔の結果を格納する。

だから私のテーブルには、エントリに対して次のようになります。{入力:[ラジアンANGLE]、出力:[罪(ラジアン)]}

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

私はクロスを使用して、私のニューラルネットワークを訓練するためにこの表を使用エントロピー、学習率0.3、繰り返し回数20000

問題は、私は、私はフレームワークシナプス(https://github.com/cazala/synaptic)を使用しています、それは「NaNの」返し

を何かを予測しようとすると、それは、失敗ということで、ここに私のコードのJSfiddleです:https://jsfiddle.net/my7xe9ks/2/

+0

この部分だけでなく、完全にコードを共有する必要がありますが、これはまったく関係のないIMHOと思われます。 –

+0

言語タグを追加すると役立ちます。それはJavaScriptですか?どのライブラリを使用していますか?どのようにクロスエントロピーを計算していますか? –

+0

私はこのフレームワークを使用してjavascriptを使用しています:https://github.com/cazala/synapticここに私のコードのjsfiddleです:https://jsfiddle.net/my7xe9ks/2/ – Raphael

答えて

0

Aは、注意深く調整する必要があります。このパラメータは、グラデーションが爆発してナノを取得する場合に特に重要です。この場合、学習率を通常10倍に下げる必要があります。

具体的なケースでは、学習率が高すぎます。0.05または0.01を使用するとネットワークが正しくトレーニングされ、正しく動作します。

また、クロスエントロピーを損失として使用していることもあります。この損失は分類に使用され、回帰の問題があります。代わりに平均二乗誤差損失を使用することをお勧めします。

+0

答えをありがとう、学習率を決定する方法はありますか、それを手動で調整し、完璧なものを取得する必要がありますか? – Raphael

+0

@Raphael手動でチューニングする必要がありますが、Adagrad、ADAM、RMSPropなどのオプティマイザがあり、トレーニング中に学習率を自動的に調整するのに役立ちます。 –

+0

MSE(Mean Squared Error)を使用すると、ある時間に結果が完全に間違ってしまうことが示唆されています。私は0.005の学習率を使いました(他の学習率を試しましたが、同じことをやっていました)。ここではjsfiddleです:https://jsfiddle.net/my7xe9ks/4/あなたは何が起こるかも知っていますか? – Raphael