理解了BP神经网络的原理,接下来实现一个结构比较完整的BP神经网络:3个输入节点,3个隐含层节点,2个输出节点。
对Numpy不是很熟悉,看例子琢磨了好久,才做通,还是不错。
一点体会:Numpy真是强。
这里是把4个样本一次性训练完,然后累积误差;然后下一个循环再次学习这4个样本。
这一点和教材把学习样本一个一个的学习,有点不一样。
import numpy as np
# --------------------------------------------
# 激活函数
# 当derive为True时,是对sigmoid函数求一阶导数后的函数,f'=y*(1-y)
def f_sigmoid(x, derive=False):
if not derive:
return 1 / (1 + np.exp(-x))
else:
return x * (1 - x)#这里的x实际上是f(x)
# --------------------------------------------
# 学习的样本,3个维度,共4个样本,因此是3x4的矩阵
X = np.array([[1, 1, 1],
[1, 1, 2],
[1, 2, 2],
[2, 2, 2]])
# 预期输出,即监督值
Y = np.array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
# Weights
np.random.seed(3)
# 4 x 3 ,说明隐藏层有3个结点,但是包括1个偏置
W &