for(int i = cikl; i > 2; i--) { out = OUT(i); // Получаем выход сетки target = (Close[i]-Close[i+1])/Close[i+1];--------------------// Получаем целевое значение delta = target - out;-----------------------------------------// Вычитаем выход сетки из целевого значения pr = th(out);-------------------------------------------------// Вычисляем производную выходного сигнала pr = 1 - pr*pr;-----------------------------------------------//
for(int n = 0; n < 4; n++) { Corr[n] += delta * pr * D2[n];--------------------------------// Вычисляем ошибку для каждого веса и суммируем её за всю эпоху Norm[n] += Corr[n]*Corr[n];-----------------------------------// Считаем норму вектора коррекций для каждого веса за всю эпоху } } // ------------------------------------- КОНЕЦ ЭПОХИ --------------------------------------------------
創作活動中は、アーティストに見えるようにしなければならないんだ!でも、コーディングしているときは ...:о)))
PS:セレガ、MathCADではほぼモノペニックですが、C++/FORTRANでは・・・。は違うだろうが、MathCADでは - 控えめに言っても(この特定のケースのために)そうではない。また、meanを使えばさらに速くカウントされますし、例えばcorrを 使えば、「速い」アルゴリズムは亀になります :o)。どうやるのかは知りませんが、「和算」演算子に関しては、ループよりずっと速いです。もし、そのようなことがないのであれば......新鮮なバージョンを入れてください。
了解です。
情報ありがとうございました
このようなことをカウントダウンごとに教えることが望ましいのですが、簡単にはいかないことをお忘れなく。
今、わかったよ!委員会を全部まとめて数えていたら...。
隠れ層のニューロン数は増やさない。2つでも問題なく動作しているのに、なぜでしょう?
もし、あなたが気にしないのであれば、私はすでに2層メッシュを準備し、動作させているので、OROに直行したいと思います(「背景からの」スケールでも)、興味があれば - 私はコードをレイアウトすることができます。
今のところ、こんな感じです。
d = 17;
w = 17*3 + 4 = 55;
P = 4*55*55/17 = 712;
------------------------------------------------------------------------
これまでのOROアルゴリズムは、このように把握されています(出力層の重みの場合のみ)。
for(int i = cikl; i > 2; i--)
{
out = OUT(i); // Получаем выход сетки
target = (Close[i]-Close[i+1])/Close[i+1];--------------------// Получаем целевое значение
delta = target - out;-----------------------------------------// Вычитаем выход сетки из целевого значения
pr = th(out);-------------------------------------------------// Вычисляем производную выходного сигнала
pr = 1 - pr*pr;-----------------------------------------------//
for(int n = 0; n < 4; n++)
{
Corr[n] += delta * pr * D2[n];--------------------------------// Вычисляем ошибку для каждого веса и суммируем её за всю эпоху
Norm[n] += Corr[n]*Corr[n];-----------------------------------// Считаем норму вектора коррекций для каждого веса за всю эпоху
}
}
// ------------------------------------- КОНЕЦ ЭПОХИ --------------------------------------------------
// ----------------------------------- КОРРЕКЦИЯ ВЕСОВ ------------------------------------------------
for(i = 0; i < 4; i++)
W2[i] += Corr[i]/MathSqrt(Norm[i]);
効きそうですねー。でも、やっぱり何かがおかしい。1000エポック以上経過すると、すべての重みが非常に小さくなっています。
W2 [0] = 0.0876 W2 [1] = 0.0772 W2 [2] = -0.0424 W2 [3] = -0.05
何を見落としていたのか、これからどうすれば誤差を入力ウエイトに押し込めることができるのか。
プライベートメッセージを見てください。ここに書くのは申し訳ないのですが、メッセージが反映されないことが多いのです。
セルゲイ、プライベートメッセージを確認してください。
パラローカスへ
お返事はもう少し後になります。
NSの入力データを作っていて、ふと思いついたんです。ところで、学習ベクトル長を計算する際に、重みの数を3倍にしていたのはなぜですか?w=17+4で終わりなんですね!?各委員に自分なりのベクトルをもってトレーニングしているのか...。
...ところで、学習ベクトル長を計算する際に、重みの数を3倍にしていたのはなぜですか?w=17+4とすればいいんですね!?各委員に自分なりのベクトルをもってトレーニングしているのか...。
この場合、入力ベクトルは同じである。各カウントで一度読まれ、各委員が個人の「ポイント(重み)」を通して「見て」判断するのです。
もちろん、委員会メンバー全員分を別々に読むこともできますが、結果が同じになるのでは意味がありません。入力ベクトルは商の16連続増分+1入力です。
А...わかったよ!そうですね、以前は2種類の入力ベクトルを持っていました。コチラはフィボシリーズ(2,3,5,8・・・)に従ってdtで増分していきます。と、ルークシリーズの3,4,7,11...。で、委員は2名だけでした。当時は委員ごとに違うベクトルを読んでいましたが、今はOROを理解することに重点を置いて簡略化しています。つまり、この場合のベクトルは、1である。
2層目しか教えなかったから、こんなにウェイトが下がったのでしょうか?
まあ、それでも、w=17+4で、各メンバーが同じベクトルを持っていることが判明したのですが。
パラローカス、こんな感じです。先走らず、MQLで非線形出力のある二層非線形Perspectronを解いて、プラスアルファの結果を得ましょう。その後、(必要に応じて)ネットワークの委員会に移行することになります。
いかがでしょうか?
まあ、それでも、w=17+4で、各メンバーが同じベクトルを持っていることが判明したのですが。
パラローカス、こんな感じです。先走らず、MQLで非線形出力のある二層非線形Perspectronを解いて、プラスアルファの結果を得ましょう。その後、(必要に応じて)ネットワークの委員会に移行することになります。
なんて言うんだ?
よっしゃーそこで、委員と委員長を全員連れ出しました。ギャングバスターの弾丸」のようなもの...。-:)>> やってみましょう。
P/Sは1つを除いて - 1つ目
じゃあ、行こうか!
1. 最後のニューロンの出力での誤差を求める: d2out=X[-1]-OUT2, (MQLとしての番号付けを意味し、これは「将来の」カウントである).
2.入力の非直線性を考慮して再計算:d2in=d2out*(1-OUT2^2)
3.同じ誤差が軸索によって第1層の各ニューロンの出力に行く!ここで、この出力での誤差をd1outとし、その入力で再計算する手順(2)を繰り返す:d1[1]in=d1out*(1-OUT1[1]^2)、同様に隠れ層の第2ニューロンについても同様に計算を行う。
いいえ。
まず、各ウェイトの微小補正を計算する:dw=in*din - デルタルール - 入力信号に特定の入力に適用される誤差を乗算する。そして、学習ベクトルの全サンプルについて、各重みについて別々の総和にまとめます。学習エポックの1イテレーション内では重みの補正は行わない。微小補正とその2乗のみが(別の加算器で)累積される。
P.S. 上の投稿の誤りを訂正しました。微分は次のように求められる。*(1-OUT2^2)です。