目的
在学习完BP神经网络的推导后,我会用python(不带深度学习框架!)自己手写出一个简单的BP神经网络,以此加深对神经网络的理解,同时欢迎大家指出问题,一起学习与讨论~
设计思路
本次我只使用了numpy库,为了简明易懂,使用类封装的方法,做了一个含有:四节点输入层,五节点的隐藏层,与一节点输出层的BP神经网络。
这个神经网络的学习目标是将输入层的前两个数字之和与后两个数字之和相比较,结果为大于则输出1,小于就输出0。(这个学习目标对于神经网络可以说是非常地简单了)
我首先定义了一个BP神经网络的类,它包含初始化函数,激励函数,前向传播函数以及后向传播函数。然后写了一个数据集生成的函数,为了制造我们所需要的数据和它对应的输出。最后,在主函数中,我们定义好数据大小,batch size,学习率以及最大迭代次数就可以跑起来啦!
代码以及结果
代码实现
import numpy as np
class BP_network(object):
#The network is like:
# l0 -> w1 -> l1 -> w2 -> (l2 == y?)
def __init__(self):
# 4 node in input layer
# 5 node in the hidden layer
self.w1 = 2*np.random.random((4, 5)) - 1