欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

BP neural network with one hidden layer

程序员文章站 2022-05-30 18:45:07
...

二、实验要求(1)
- (1)各层节点数可配置
- (2)**函数可配置
- (3)学习率参数可配置
- (4)初始权值可配置
- (5)训练(迭代)回合数可配置
- (6)总误差要求可配置
- (7)判别阈值可配置

二、实验要求(2)
- 输入层大小:mo=2
- 隐藏层大小:1.m1=20 2.m2=10
- 输出层大小:m2=1
- **函数:1.双曲正切函数(a=2) 2.logistic函数:a=2
- 阈值设置:0
- 学习率参数:1.l=0.001 2.学习率退火方案:l=0.1,l=l/(1+n/10)
- 迭代次数:10000
- 双月垂直分割距离:1.d=-4, 2.d=-5
- 报告分析:比较各迭代次数(100,1000,10000)时的性能

三、**函数
logistic函数:

φ(x)=11+eax(a>0)

双曲正切函数:
φ(x)=atanh(bx)=aebxebxebx+ebx(a,b>0)

tanh(x)=2sigmoid(2x)1

四、神经网络模型的建立
模型如下,中间的隐藏层单元个数不定,根据实际情况进行设定,比如本次的实验要求隐藏层单元数分别为20或10,输入层大小为2,输出层大小为1,
**函数:
logistic函数:

φ(x)=11+e2x

或是双曲正切函数:
φ(x)=atanh(bx)=2e2xe2xe2x+e2x

BP neural network with one hidden layer

五、BP网络传播的过程(手稿)
BP neural network with one hidden layer

六、BP网络的反向传播的计算
BP neural network with one hidden layer

七、BP网络参数的初始化
一般来说,尽量不要将参数初始化为0,这样得到的结果相对符合预期。参数为0的情况下在传播过程中不易得到最优解。
在实际的操作过程中,将参数W,b初始化为随机的小数。

八、BP网络的损失函数
将输出误差定义为

e=12(a[2]y)2

那么总体网络的损失函数即为所有输入样本点的误差取均值。即:
E=12i=1m(ai[2]yi)2

当成本函数:
$J=12(y^y)2
$

**函数分别为sigmoid和tanh时

    dZ2= np.multiply(A2-Y, np.multiply(A2,1-A2))
    dW2 = np.dot(dZ2, A1.T)/m
    db2 = np.sum(dZ2, axis=1, keepdims=True)/m
    dZ1 = np.multiply(np.dot(W2.T, dZ2), 1-np.power(A1, 2))
    dW1 = np.dot(dZ1, X)/m
    db1 = np.sum(dZ1, axis=1, keepdims=True)/m
当成本函数为
$J=1mi=0m(y(i)log(a[2](i))+(1y(i))log(1a[2](i)))
$

**函数分别为tanh和sigmoid时

    dZ2 = A2 - Y
    dW2 = np.dot(dZ2, A1.T)/m
    db2 = np.sum(dZ2, axis=1, keepdims=True)/m
    dZ1 = np.multiply(np.dot(W2.T, dZ2), 1-np.power(A1,2))
    dW1 = np.dot(dZ1, X)/m
    db1 = np.sum(dZ1, axis=1, keepdims=True)/m

九、更新权值
上面已经求得了BP网络的权值梯度,根据学习率(表示梯度下降的一个程度)的大小,进行权值的更新。

W1=W1learning_ratedW1

b1=b1learning_ratedb1

W2=W2learning_ratedW2

b2=b2learning_ratedb2

* 十、结果的分类预测*
因为是一个二分类问题,根据实际输出值所在区间,比如,sigmoid函数作用后的输出域在

$(0,1)
,0.50.50.5predictions=yprediction={1if (a>0.5)0otherwise$

Accuracy and Parameters

$Accuracy:100%
$

W1= [[-0.29009224  0.21190324]
 [ 0.35378405  0.26965377]
 [-0.29212524  0.17753929]
 [ 0.23700921 -0.21302723]]
b1 = [[-1.77782624]
 [-2.12916261]
 [-1.67842634]
 [-3.00917384]]
W2 = [[-1.5978967  -2.91601014 -1.47659465  2.5554046 ]]
b2 = [[-0.23817371]]

Visualize the result

BP neural network with one hidden layer

十一、迭代次数分别为100、1000和10000的网络性能
- 迭代100次的结果
BP neural network with one hidden layer
- 迭代1000次的结果
BP neural network with one hidden layer
- 迭代10000次的结果
BP neural network with one hidden layer

十二、调节神经网络过程的结果思考

在调节BP网络的过程中,发现并不是隐藏单元的个数越多越好,当我使用10个隐藏单元计算BP网络时,不仅仅是加大了计算复杂度,同时迭代的过程中得到的代价函数值也不能收敛至一个极小值。在经过尝试之后,发现4个隐藏单元的网络计算速度快,得到的结果好。
第二个就是学习率的问题,在多次尝试了0.1、0.01、0.001、0.8、1.2等学习率后,非常小的学习率虽然能减少梯度下降过程中的振荡问题,但是由于梯度下降速度太慢,几千次的迭代后,梯度会下降的越来越慢,导致结果不理想,在尝试了大于1的学习率后,能够显而易见的看到损失值的变化,最终的误差也能够控制在0.001之后,这样得到的结果基本上是一个很好的结果。正如我们看到的那样,在设置了1.2的学习率和4个隐藏单元后,我们迭代了1000次,得到了一个准确率为100%的分类结果。
当然,我们从上面可以看到,迭代次数会很是影响整个网络的输出结果的,当使用小学习率迭代10w次未必不能达到一个较好的结果。当然,对于小数据集无限的进行迭代计算是没有关系的,但是对于大数据集、深层网络来说,每一次的迭代计算都会耗费大量的时间,在深层网络中,如何优化好每一层的网络将依然是重中之重。

==实验代码、过程及结果见* BP neural network with one hidden layer.ipynb*文件==