基于BP神经网络–预测空气中PM2.5浓度

BP神经网络

BP神经网络包括输入层、隐藏层和输出层。BP神经网络示意图:

隐藏层的选取
H= sqrt(m + n) + a
H 为隐藏层的节点数,m为输入层的节点数,n为输出层的节点数,a为1-10之间的调节常数

正向传递过程


当输入一个样例后,获得该样例的特征值,再根据权向量得到感知器的输入值,然后使用激活函数sigmoid计算出每个感知器的输出,在将此输出作为下一层感知器的输入,以此类推。

BP神经网络使用梯度下降,通过反向传播过程来不断调整网络的权重和阈值,使误差平方和最小。
BP网络中每个神经元的映射关系如下:



对于隐藏层的第i个神经元的计算方法:



反向传递过程

BP神经网络中,误差信号反向传递是基于Widrow-Hoff学习规则。建立残差函数,并对其求偏导:





Widrow-hoff学习规则使通过沿着相对误差平方和的最快速度下降公式,连续调整网络的权值和阈值,根据梯度下降,权值矢量的修正正比于当前位置上的梯度,对第j个输出节点有:



在对残差公式求偏导,再根据梯度下降得到局部极小值解,更新w,b:


算法实现

数据归一化代码

将数据归一化到[0,1]或者[-1,1]、甚至更小的区间。
以下两种归一化方法:
1.下列式子把数据归一化到[0,1]
Y = (x - min) / (max - min)
2.有些情况下,需要把数据归一化到[-1,1]区间中
Y = 2 * (x - min) / (max - min) - 1 def _normalize(self,trainX): minx,maxx =
self._MaxMin_(trainX)return minx,maxx def _MaxMin_(self,trainx): n,m =
shape(trainx) minx = zeros((n,1)) maxx = zeros((m,1)) for i in range(m): minx[i,
0] = trainx[i,:].min() maxx[i,0] = trainx[i,:].max() return minx,maxx
正向传播代码

初始化参数w,b


对权值和偏置进行初始化,而不是对其设置为0,如果所有参数都用相同的值作为初始值,那么所有隐藏层单元最终会得到与输入值相关的、相同的函数。这就使初始化的目的失效。
学习率的初始化。一般学习率越小越好,收敛速度慢。

前向传播
outdata2 = self._ForwardPropagation_(self.data1[:,i],self.weight1,self.b1):
outdata3 = self._ForwardPropagation_(outdata2,self.weight2,self.b2):def
_ForwardPropagation(self,indata,weight,b): outdata = weight * indata + b
outdata =1 / (1 + exp(-outdata)) return outdata
反向传播

首先计算每一层的残差,然后计算每一层的偏导数,最后根据梯度下降更新参数

激励函数我们使用sigmoid函数、其求导后的公式为:

segma3 = (1 - outdata3) * dataout3 * (outdata3 - self.trainy[i,:]) segma2 = (1
- outdata2) * dataout2 * (outdata2 -self.trainy[i,:]) w_derivative2 = segma3 *
outdata2 b_derivative2 = segma3 w_derivative1 = segma2 *self.data1
b_derivative1 = segma2 weight2 =self.wight2 - self.learningrate * w_derivative2
b2 = b2 -self.learningrate * b_derivative2 weight1 = self.wight1 - self
.learningrate * w_derivative1 b1 =self.b1 - self.learningrate * b_derivative1
参考文章:
1.https://blog.csdn.net/hjimce/article/details/45457181
<https://blog.csdn.net/hjimce/article/details/45457181>
2.https://blog.csdn.net/acdreamers/article/details/44657439
<https://blog.csdn.net/acdreamers/article/details/44657439>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信