由于算法的实现是正确的(我检查了数百次),我想我误解了一些理论事实。
我假设:假设
j 指的是隐藏层侧,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 http://www.inf.fu-berlin.de/lehre/WS06/Musterererkennung/Paper/rprop.pdf
对于输入和隐藏以及隐藏输出之间的所有权重。
我正在尝试识别由 '#' 和 '-' 、 9(rows)x7(columns) 组成的字母。
几个时期后,MSE 卡在 172 处。
我知道 RPROP 是批量学习,但我正在使用在线学习,因为我读到它仍然有效。