- 企业级AI技术内幕:深度学习框架开发+机器学习案例实战+Alluxio解密
- 王家林 段智华编著
- 787字
- 2021-03-26 23:54:02
9.2 增加和调整alpha参数
接下来我们看一下ANN_V3.py的代码。
ANN_V3.py的源代码如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P142_130883.jpg?sign=1739586793-K9kesprzCJIWa7JSxsMR0BThB7MEkllF-0-415ade519ac8fe1fd005fb7151fa4f1e)
在Spyder集成开发环境中运行ANN_V3.py,运行结果如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P143_130885.jpg?sign=1739586793-z5TuQNv1vwQrnemmrdGuKUIpqPX6RkLM-0-d8345e4eabec6bef8a37463cb456dbc4)
在ANN_V3.py的源代码中:
第27行代码随机初始化权重,权重synapse_0是一个2×1的矩阵。将权重的第1行第1列的值作为三维空间的x维度,将权重的第2行第1列的值作为三维空间的y维度,将误差layer_1_error作为三维空间的z维度,就形成了三个维度的空间(x,y,z),如图9-10所示。从三个维度x、y、z的角度,z是误差本身,x、y是不同的权重。
第33行代码将输入值与权重进行点积运算,经过Sigmoid激活函数计算得到输出值,前向传播算法实现过程如图9-11所示。
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P144_24950.jpg?sign=1739586793-eX9i5OkyH0DTHHRnXatnTM2c6VZideVv-0-50ef55aed5561ddbe84bbba2cc18da3a)
图9-10 权重及误差图
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P144_24955.jpg?sign=1739586793-ArvvtoGQUJMo606U82rnWWvezk4bIp1g-0-d145345c494e77240bb1b77a137a6f13)
图9-11 前向传播算法实现过程
第36行代码计算误差,将预测值减去实际值得到误差值。
第39~43行代码通过反向传播算法更新权重,如图9-12所示。
ANN_V3.py是朴素梯度下降的过程,这种方式很简单。ANN_V3.py是2层网络,ANN_V4.py增加了1层隐藏层,是3层网络。ANN_V4.py在ANN_V3.py的基础上对权重更新进行了优化。
ANN_V4.py的源代码如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P144_130886.jpg?sign=1739586793-SwkoT9nyCyPm2N4FViyK1T3WWVIekuZP-0-d13617ee2a39d253f21aa901453c530c)
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P145_25168.jpg?sign=1739586793-rYqY7pqS6RkHrZyHBIJPL7dtWCE1Vbq9-0-09bcd6d44ee2862c8a6f5b5a73ee2530)
图9-12 反向传播算法实现过程
在ANN_V4.py的代码中:
第4行代码构建alphas的列表,alpha包括0.001、0.01、0.1、1、10、100、1000。
第25行代码循环遍历alphas的各个值,比较在不同alpha取值时误差的大小。
第36~38行实现前向传播算法,如图9-13所示。
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P146_25791.jpg?sign=1739586793-G26dCRfoRuBRrMExN4MydNbQ2GWDYWWe-0-284e0b08c222b4244af48b7798b5577f)
图9-13 前向传播算法的实现过程
第47~56行实现反向传播算法及进行权重更新,如图9-14所示。
ANN_V4.py代码的主要改进是第55、56行,这两行代码调节权重,权重更新时乘以alpha系数,不同的alpha值表示不同的步伐,步伐有可能太大,也有可能太小。alphas是我们声明的一个数组,alphas=[0.001,0.01,0.1,1,10,100,1000]。
在Spyder中运行ANN_V4.py,运行结果如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P147_26133.jpg?sign=1739586793-OzOIBSYVtw8bdKN0IfLFherZljCqa5Dz-0-082f3845abb1869036d37f8c4c773781)
图9-14 反向传播算法实现过程
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P147_130889.jpg?sign=1739586793-iCClWTrS2TYYeFALN6WvXNeWyUOMF78E-0-51f8bd1f395b73f1ffe40e448a56e4d1)
查看alphas分别为0.001、0.01、0.1、1、10、100、1000时的情况,alphas为1、10的时候效果是最理想的,alphas为0.001时不太好,alphas为1000时就更不好了。从实际运行的结果看,alphas为10的时候效果是最好的,这表明0.001、0.01、0.1的步伐太小。
在TensorFlow人工智能框架中,alphas值表示为学习率,学习率可以设置为0.00001、0.0001、0.001、1、3、10等,学习率是一个参数,可以调整。
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P148_26927.jpg?sign=1739586793-Y19lxezl4yfHc7JjGLoqODVl4iO4YPdR-0-5bde93c6bc0049167277063931d2adcf)
图9-15 TensorFlow的学习率设置