前菜
-
这是个最基本的bp神经网络,今天我们就用python的numpy来实现它!
-
sigmoid函数:
话不多说,上代码!
from numpy import exp, array, random, dot
# 训练数据 输入
training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
# 训练数据 输出
training_set_outputs = array([[0, 1, 1, 0]]).T
# seed是限制随机数,使其生成的都是同一个
random.seed(1)
# 生成随机数,三行一列
synaptic_weight = 2 * random.random((3, 1)) - 1
# 迭代一万次,进行训练
for iteration in range(10000):
# 将训练集的输入和权重dot进行矩阵相乘,结果输入到sigmoid函数中
output = 1 / (1 + exp(-(dot(training_set_inputs, synaptic_weight))))
# 权重调整采用误差加权导数公式
synaptic_weight += dot(training_set_inputs.T, (training_set_outputs - output) * output * (1 - output))
# synaptic_weight是最终的权重,array([1,0,0])是测试数据,同样是sigmoid函数
print(1 / (1 + exp(-dot(array([1, 0, 0]), synaptic_weight))))
除了注释,实际9行代码。
BP神经网络就这么简单?不过如此?
非也!这连冰山一角都算不上。(冰山一角,是水的密度为1,冰的密度是0.9,所以冰的1/10会露出在水面之上)
持续关注吧!peace&love