0

アルゴリズムの実装は正しいので (何百回もチェックしました)、理論上の事実を誤解していると思います。
jがhiddenlayer
側を指し、kが出力層を指すとすると、
∂E/∂wjkは次のように計算されます。

outputNeuron[k].errInfo=(target[k]-outputNeuron[k].out)*derivate_of_sigmoid(outputNeuron[q].in);
∂E/∂wjk=outputNeuron[k].errInfo*hiddenNeuron[j].out;

∂E/∂wij の場合、'i' は入力層を指し、'j' は隠れ層を指します。これは少し長くなります。
各隠れユニット (Zj、j = 1、...、p) は、(出力層のユニットからの) デルタ入力を合計します。

errorInfo_in[j] = k=1 から m(出力ユニットの数) までの合計: outputNeuron[k].errInfo*w[j][k]

次に、隠しユニットのエラー情報を計算します。

hiddenNeuron[j].errInfo=errorInfo_in[j]*derivated_sigmoid(hiddenNeuron[j].in);

最後に、∂E/∂wij は次のとおりです。

hiddenNeuron[j].errInfo*x[i] (x[i] は入力ユニットの出力)

ここで説明されているように、RPROP を適用します

「#」と「-」で構成される文字、9(行)x7(列)を認識しようとしています。
MSE は、数エポック後に 172 でスタックします。
RPROP がバッチ学習であることは知っていますが、とにかく機能すると読んだので、オンライン学習を使用しています。

4

1 に答える 1

1

RPROP は、純粋なオンライン学習ではうまく機能しません。ミニバッチが十分な大きさであれば、ミニバッチ学習でも機能する可能性があります。MSE の絶対値は、特にゴールド スタンダード値が不明なカスタム データセットでは、何の指標にもなりません。

より複雑なものに移行する前に、論理ゲート (AND、OR、XOR) などの単純なもので新しく実装された NN アルゴリズムをテストすることをお勧めします。このようにして、コードと方法論に常に自信を持つことができます。文字認識タスクの場合、MNIST などのよく知られたデータセットでテストすることもできます。このデータセットでは、予想される結果がわかっているため、結果を以前の作業と比較できます。

分類タスクでは、MSE よりもはるかに優れたパフォーマンス指標であるため、通常、分類の精度を測定する必要があります。

于 2015-04-07T10:07:01.917 に答える