Back Propagation 用python写一个最简单的三层神经网络算法。
最简单的三层神经网络,大多数都是使用np.array写的,因为用矩阵可以很轻松的进行数据计算,表达等操作。
此代码使用全字典,意在更为清晰明了的看清楚代码的key与value的关系。
一个3,2,1的典型三角神经网络
将[1,0,1]输入第一层的1,2,3号神经元,隐藏层为5,6号神经元,输出层为6号神经元。
设想的输出
为1
,学习系数l
为0.9
各个神经元间的初始权重
为:
权重key | w14 | w15 | w24 | w25 | w34 | w35 | w46 | w56 |
---|---|---|---|---|---|---|---|---|
权重value | 0.2 | -0.3 | 0.4 | 0.1 | -0.5 | 0.2 | -0.3 | -0.2 |
初始的神经元偏置
:
θ₁ | θ₂ | θ₃ |
---|---|---|
-0.4 | 0.2 | 0.1 |
随即可以使用总输入输出公式算出各个神经元的输入Sj与输出Oj:
Sj = ∑wij Oi + θj
Oj = 1/(1+e^(-s)j)
再计算每个神经元的误差Ej:
Ej = Oj (1 - Oj) ∑k Wjk Ek
最后更新权重:
Wij = wij + △wij = wij + (l) Oi Ei
就得到了新的权重然后无限循环来寻找一套权重来适应预设的输入与期望输出。