【发布时间】:2013-04-26 21:27:02
【问题描述】:
我正在学习神经网络,特别是研究具有反向传播实现的 MLP。我正在尝试在 python 中实现我自己的网络,我想在开始之前我会查看其他一些库。经过一番搜索,我找到了 Neil Schemenauer 的 python 实现 bpnn.py。 (http://arctrix.com/nas/python/bpnn.py)
在完成了代码并阅读了 Christopher M. Bishops 书“用于模式识别的神经网络”的第一部分后,我发现 backPropagate 函数存在问题:
# calculate error terms for output
output_deltas = [0.0] * self.no
for k in range(self.no):
error = targets[k]-self.ao[k]
output_deltas[k] = dsigmoid(self.ao[k]) * error
Bishops 书中计算误差的代码行不同。在第 145 页,等式 4.41 他将输出单位误差定义为:
d_k = y_k - t_k
其中 y_k 是输出,t_k 是目标。 (我用 _ 代表下标) 所以我的问题是这行代码应该:
error = targets[k]-self.ao[k]
实事求是:
error = self.ao[k] - targets[k]
我很可能完全错了,但请有人帮忙解决我的困惑。谢谢
【问题讨论】:
-
由于错误是这个时期的结果与预期相差多少,这应该是正确的线:
error = targets[k]-self.ao[k]但两者都可以是正确的,这取决于dsigmoid(self.ao[k])的信号也是。 -
无论你对 y 推导 (y-t)^2 还是 (t-y)^2 都没有区别,它始终是 y-t,而不是 t-y。
标签: python neural-network backpropagation