Поскольку реализация алгоритма правильная (я проверил ее сотни раз), я думаю, что неправильно понял некоторые теоретические факты.
Я полагаю, что:
при условии, что J относится к стороне hiddenlayer и к выходному слою
∂E/∂wjk рассчитывается путем делать:
Моя нервная сеть RPROP застревает
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, ..., р) суммирует свои дельта-входы (от единиц в выходном слое),
errorInfo_in[j]=summation from k=1 to m(number of output units) of: outputNeuron[k].errInfo*w[j][k]
Затем я вычислить информацию об ошибке скрытого блока:
hiddenNeuron[j].errInfo=errorInfo_in[j]*derivated_sigmoid(hiddenNeuron[j].in);
Наконец ∂E/∂wij является:
hiddenNeuron[j].errInfo*x[i] (where x[i] is the output of an input unit)
я применяю RPROP, как описано здесь http://www.inf.fu-berlin.de/lehre/WS06/Musterererkennung/Paper/rprop.pdf
Для всего веса между входным и скрытым и скрытым выходом.
Я пытаюсь распознать буквы из «#» и «-», 9 (строки) x7 (столбцы).
MSE просто застрял в 172 после нескольких эпох.
Я знаю, что RPROP - это пакетное обучение, но я использую онлайн-обучение, потому что я читаю, что он работает в любом случае.