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:Serega,在MathCAD中它几乎是单开的,但在C++/FORTRAN中...将是不同的,但在MathCAD中--说句不好听的,不是(对于这个特定的案例)。如果你使用平均数,它的计算速度会更快,如果你使用corr,例如,你的 "快速 "算法会龟缩 :o)。他们是如何做到的,我不知道,但至于 "求和 "运算符--它比循环快得多。如果你没有那样做--那么就放一个新版本。
明白了。
谢谢你提供的信息!
不要忘记,建议在每次倒计时时都要教这些东西--这并不容易。
现在我明白了!我在数所有的委员会在一堆...
我不打算增加隐藏层的神经元数量。我不明白为什么,它在两个人的情况下运作良好。
如果你不介意的话,我想直接使用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个连续增量的商数+一个单一输入。
А...我明白了!是的,我曾经有两个不同的输入向量:Kotir根据Fibo系列的dt递增 - 2,3,5,8...和其他由卢克的系列 - 3,4,7,11...而且只有2名委员会成员。那时,每个委员会成员都阅读不同的载体,但现在我把事情简化了,专注于理解ORO。因此,在这种情况下,矢量是1。
会不会因为我只教了第二层而使重量下降这么多?
那么,结果仍然是:W=17+4,每个成员都有相同的向量。
Paralocus,这是我的想法。我们不要超前,在MQL中解决一个具有非线性输出的双层非线性Perspectron,并得到一个积极的结果。然后你将转到网络委员会(如果需要)。
你怎么看?
那么,结果仍然是:W=17+4,每个成员都有相同的向量。
Paralocus,这是我的想法。我们不要超前,在MQL中解决一个具有非线性输出的双层非线性Perspectron,并得到一个积极的结果。然后你将转到网络委员会(如果需要)。
你怎么说?
好的!我的意思是,我们把所有的政委和主席都带出去。有点像 "帮派子弹"......-:)>> 让我们开始吧。
P/S,除了一个--第一个
好吧,那我们就走吧!
1.找到最后一个神经元输出端的误差:d2out=X[-1]-OUT2,(我的意思是编号为MQL,这是 "未来 "的计数)。
2.考虑到其输入的非线性,重新计算:d2in=d2out*(1-OUT2^2)
3.同样的误差通过轴突进入第一层的每个神经元的输出端!现在,其输出端的误差为d1out,我们重复程序(2)在其输入端重新计算:d1[1]in=d1out*(1-OUT1[1]^2),以同样的方式对隐藏层的第二个神经元进行计算。
没有。
首先,我们计算每个权重的微观修正:dw=in*din--德尔塔规则--我们用输入信号乘以适用于某个特定输入的误差。然后,我们在训练向量的所有样本上对每个权重进行单独的总结。在训练纪元的迭代中,权重没有被修正。只有微校正和它们的平方被累积(在另一个加法器中)。
P.S. 我纠正了上面帖子中的错误。导数的求法如下。*(1-OUT2^2)。