简单网络的反向传播代码这么写就对了:分解步骤+完整实现( 二 )

6.3 BP四个基本方程之:中间层神经元误差

简单网络的反向传播代码这么写就对了:分解步骤+完整实现

文章插图
 
derivativeHidden = derivative_sigmoid(hiddenActivation)derivativeHidden.shapedeltaHidden = np.dot(deltaOutput, weightsHiddenOutput.T) * derivativeHiddendeltaHidden.shapedeltaHidden6.4 BP四个基本方程之:权重和偏置的更新
简单网络的反向传播代码这么写就对了:分解步骤+完整实现

文章插图
 
# Learning ratelr = 0.01weightsHiddenOutput -= np.dot(hiddenActivation.T, deltaOutput) * lr# 3xN x Nx1 = 3x1weightsInputHidden -= np.dot(X.T, deltaHidden) * lr# 4xN x Nx3 = 4x3biasOutput -= np.sum(deltaOutput, axis=0) * lrbiasHidden -= np.sum(deltaHidden, axis=0) * lr注意: 上面注意维度的匹配!网络本身的参数维度和样本数均无关,比如权重和偏置的维度,都不可能与样本数有关系!这是检验我们有没有做对的一个很有用的标准 。
【简单网络的反向传播代码这么写就对了:分解步骤+完整实现】到这为止,对这个神经网络的一次完整的前向传播+反向传播的流程算是进行完了!这是分解动作,也是完成了一次『训练』,但是一个神经网络必须经过多次训练,才能够较好的调整参数并完成任务,因此我们需要把这个训练过程写入一个循环中,反复进行!


推荐阅读