オンラインコースの束を取り、多くの論文を読んだ後、私はneural-netで遊び始めましたが、驚いたことに単純なビット単位AND演算を一般化できません。ニューラルネットは単純なビット単位で一般化することに失敗します
入力:
Inp#1 - randomly generated number between 0-15, scaled down to (0,1)
Inp#2 - 16 bit randomly generated unsigned int scaled down to (0,1)
# Code snippet
int in1 = (int)rand()%16;
int in2 = (int)rand()%(0x0010000);
in[0] = (fann_type)(in1/100.0); // not to worry about float roundup
in[1] = (fann_type)(in2/100000.0); // not to worry about float roundup
出力:
Out#1 = -1 if the corresponding bit specified by index inp#1 in inp#2 value is 0, otherwise 1
# Code snippet
int out1 = (in2 & (1<<in1)) ? 1 : -1;
out[0] = (fann_type)out1;
ネットワーク:テストのためのトレーニング、5000 5000のサンプル:データセット
A. 1 hidden layer with 30 neurons,
Activation Function (hidden): sigmoid,
Activation Function (output): sigmoid_symmetric (tanh),
Training method: RPROP
Learning rate: 0.7 (default)
Momentum: 0.0 (default)
RPROP Increase factor: 1.2 (default)
RPROP Decrease factor: 0.5 (default)
RPROP Minimum Step-size: 0 (default)
RPROP Maximum Step-size: 50 (default)
B. 3 hidden layers each having 30 neurons, with the same params as in A
C. tried the same networks also with scaling inputs to (-1,1) and using tanh for also hidden layer.
例である以下、多くの異なるバリエーションを試し検証のための5000さらに大きなデータセットを試していない、何の成功
# examples from training set
0.040000 0.321600
-1
0.140000 0.625890
1
0.140000 0.039210
-1
0.010000 0.432830
1
0.100000 0.102220
1
プロセス:トレーニングセットで訓練されたネットワークとの可能なオーバーフィッティングを避けるために、並列にテストデータのMSEを監視しました。
ライブラリ:複数使用されましたが、主にfannで試してみましたが、guiにfanntoolを使用しました。
アイデア?特に関心がある場合は、データセットをアップロードできます。
あなたの学習率は?トレーニングプロセス中のコスト関数の値は何ですか? – gcucurull
不足している情報をカバーするように説明を更新し、実際のコードスニペットも提供しました。ありがとう – user1039384
あなたは何をやっているのは、分類作業です。なぜ、-1,1つの出力とMSEを0,1、およびログ損失の代わりに使用していますか?そのような設定がより良い仕事をしていることが証明されています。 Btw。この作業は容易ではありません。このような操作を学ぶためには神経網のためにかなり厳しいです。 –