我正在学习神经网络,具体来说是在研究带有反向传播实现的MLP。我试图在Python中实现自己的网络,所以在开始之前,我想先看看其他一些库。在搜索了一番之后,我找到了Neil Schemenauer的Python实现bpnn.py。(http://arctrix.com/nas/python/bpnn.py)
通过阅读Christopher M. Bishop的书籍《模式识别的神经网络》,并且仔细研究了代码之后,我发现了backPropagate函数中的一个问题:
通过阅读Christopher M. Bishop的书籍《模式识别的神经网络》,并且仔细研究了代码之后,我发现了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
在Bishop的书中,计算误差的代码行与其他不同。在第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])
的信号。 - Arthur Julião