2

まず... これは ConvNetJs の問題ではなく、ニューラル ネットワークの理解の問題だと思います。

与えられた 2 つの乱数を加算した結果が偶数かどうかを検出します。

例:

[4,6] = 真

[3,4] = 偽

私のセットアップ:

var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:2});
layer_defs.push({type:'fc', num_neurons:20, activation:'relu'});
layer_defs.push({type:'softmax', num_classes:2});

net = new convnetjs.Net();
net.makeLayers(layer_defs);
var trainer = new convnetjs.Trainer(net, {method: 'adadelta', l2_decay: 0.001,batch_size: 10}

次に、10,000回の反復で(乱数を使用して)トレーニングしました。近づくことはありません。せいぜい約 56% の精度です。

同じセットアップを使用しても問題は異なります。

最初の数値が 2 番目の数値よりも大きい。1,000 回未満の反復で 99% の精度を達成します。

私が試したこと: より多くのレイヤー より多くのニューロン svm vs softmax

これが「分類できない」問題なのかどうか疑問に思っています。

4

1 に答える 1

4

問題は、2 つの数値を加算し、結果を奇数または偶数として分類する問題であり、ニューラル ネットワークには適していません。ニューラル ネットワークは関数の推定を試みます。推定される関数が滑らかであるほど、ニューラル ネットワークが収束しやすくなります。(それは 100% 真実ではないかもしれませんが、この問題には十分です)

これら 2 つの問題がなぜそれほど異なるのかを視覚化するために、最初の数を一定にすると仮定します。次に、2 番目の数値を追加し、結果が奇数か偶数かを判断しようとする問題のグラフを考えてみましょう。このグラフは、2 番目の数値が増加するたびに前後に振動します。

ただし、2 番目の問題は、はるかに単純なグラフになります。グラフには、より小さい、等しい、より大きいに切り替わるスポットが 1 つだけあります。

于 2015-10-29T13:36:48.573 に答える