在以下神经网络的代码示例中,通过将损失(expected-output
)乘以sigmoid函数的导数([x][1-x]
,未示出)来计算误差。 请注意解决输出层的函数的else
部分。
def backward_propagate_error(network, expected):
for i in reversed(range(len(network))):
layer = network[i]
errors = list()
if i != len(network)-1:
for j in range(len(layer)):
error = 0.0
for neuron in network[i+1]:
error += (neuron['weights'][j] * neuron['delta'])
errors.append(error)
else:
for j in range(len(layer)):
neuron = layer[j]
errors.append(expected[j] - neuron['output'])
for j in range(len(layer)):
neuron = layer[j]
neuron['delta'] = errors[j] * transfer_derivative(neuron['output'])
我知道这会影响每个神经元倾向于极点,或更多https://developers.podio.com/clients/dotnet,但我不确定为什么这对整个网络有帮助。为什么这个功能有用?它似乎是反向传播的核心。