一提到反向传布算法,咱们就不自觉的想到随机梯度降落、sigmoid激活函数以及最使人头大的反向传布法则的推导,即使是把反向传布神经网络的原理学了一遍,也还是一头雾水,在这里举荐一本小编认为把BP神经网络讲的最通透的教材《Python神经网络编程》。下面小编将以代码的方式带着大家一步一步实现BP神经网络,并且还会再用框架的方式实现BP网络,用来以及源码作比较,认识一下TensorFlow2.0的强大。
咱们首先要理清树立BP神经网络的目的,其次,肯定BP神经网络的结构,简单地以一个输入层,一个暗藏层,一个输出层为例,咱们来思考一下写代码的思路,然后一步一步实现。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
请点击输入图片描写文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
在这里,咱们树立BP神经网络的目的是为了做预测,咱们这里用700条MG时间序列数据作为训练数据,输入维度是10,输出为1,为了利便,咱们设置一个暗藏层,这个暗藏层包括10个节点,所以咱们的BP神经网络的结构就是[10,10,1]。接下来,开始思考一下流程:文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
1、读取数据,将数据分为训练集以及测试集,注意这里的数据默许都是np.array的格式。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
2、初始化BP网络,主要是肯定网络结构,输入层、暗藏层、输出层个数,和随机初始化互相连接的权值文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
3、调用训练办法,传入数据进行训练文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
- 前向传布
- 反向传布
- 保留模型进行测试
里面还有不少细节,咱们边写边完美,整个程序的框架已经很明确了。从第一步开始,读取数据,第一步中需要注意的是,读取的数据最佳进行归一化处理,一方面,这样做有助于提高预测精度,另外一方面,如果使用sigmoid作为激活函数的话,它的输出是在[0,1]之间的,如果数据不进行归一化,不在[0,1]区间的数是没有方法预测的。这里咱们直接调用sklearn中的最大最小归一化的办法就能够,为了利便读者理解代码,咱们将import紧挨着代码:文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
- 读取数据way1 = &39;data = np.array))需要训练的数据y = data[:,-1] 初始化BP网络34;&34;文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
构造神经网络文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
:param ni:输入单元数量文章源自微观生活(93wg.com)微观生活-https://93wg.com/4738.html
:param nh:暗藏单元数量
:param no:输出单元数量
&34;& +1 是为了偏置节点
self.nh = nh
self.no = no
这里会生成一个1*ni维,数值全为1的列表
self.ah = [1.0] * self.nh
self.ao = [1.0] * self.no
输入层到暗藏层
self.wo = np.random.randn 记录权重矩阵的上次梯度
self.ci = np.zeros
self.co = np.zeros
第三步开始训练并保留模型:
def train:
&34;&34;&34;
for i in range: 训练集
inputs = train[j] 目标值
self.forword_propagation 反向传布训练,传入lable
if i % 50 == 0: 39;wi.npy&39;wo.npy&34;&34;
sigmoid 函数,1/
:param x:
:return:
&34;&34;&34;
前向传布进行分类
:param inputs:输入
:return:种别
&34;&检查输入数据的维度是不是以及声明的一致
print
for i in range: 遍历暗藏层节点,每一个暗藏层节点的值为n个输入节点*对应权值关于“神经网络篇——从代码动身理解BP神经网络”的详细内容,希望对大家有所帮助!
评论