![企业级AI技术内幕:深度学习框架开发+机器学习案例实战+Alluxio解密](https://wfqqreader-1252317822.image.myqcloud.com/cover/212/36862212/b_36862212.jpg)
8.3 对使用矩阵方式编写的人工智能框架进行优化
盘古人工智能框架实现了神经网络,ANN_V1.py在自研盘古人工智能框架的基础上使用矩阵进行了重构,ANN_V2.py在ANN_V1.py的基础上进一步迭代及改进。
ANN_V2.py的源代码如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P136_130872.jpg?sign=1739534312-89dyxeMoSRWYQci9tDXR5eiRmQMV7lGY-0-215be0ee3e18040311119d07f51e0621)
在Spyder集成开发环境中运行ANN_V2.py代码,运行结果如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P137_130874.jpg?sign=1739534312-SlSOWvadQg7ivartOT1mh14jHISuLDzz-0-d80030d7f1323d42c417f9153ff7e915)
ANN_V2.py运行的效果非常好,最开始的误差是0.496 410 031 902 725 37,最终的误差是0.003 510 122 567 861 676 6。
ANN_V1.py中y的构建是通过np.array([[0,0,1,1]]).T转置矩阵实现的。
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P137_130875.jpg?sign=1739534312-XU4EYdTlowiT2pt06Si8rNbLv6ypPops-0-1d959f5f19184e7ca7dfb4d9e63d9acf)
ANN_V2.py中的y和ANN_V1.py中的y是一样的,ANN_V2.py中的y通过np.array方法直接写成了二维数组的形式。
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P137_130876.jpg?sign=1739534312-X2niZgww21afzPYXm04HWF3plcPwUnHW-0-e6e862fee2b6c771af489e03b2947f9e)
在ANN_V2.py代码中:
第23行代码syn0是第0个权重矩阵,是3×4的矩阵,用于连接输入层及隐藏层。
第24行代码syn1是第1个权重矩阵,是4×1的矩阵,用于连接隐藏层及输出层。
第29行代码构建输入层l0(第0层)。
如图8-16所示,第30行、第31行代码是前向传播的实现过程。
第30行代码构建神经网络的隐藏层(第1层),将输入层及第0个权重进行点积运算。
第31行代码构建输出层(第2层),将第1层隐藏层的输出结果和第1个权重进行点积运算。
如图8-17所示,第40~49行代码实现反向传播的实现过程。
第34行代码计算神经网络的误差。y是实际值,l2是预测值,将实际值y减去预测值l2得到误差值。
第40行代码中l2是输出层,将l2的值传入到nonlin函数,计算出l2_delta误差。
第43行代码计算l1_error,是第一个隐藏层每一个元素需负的责任。
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P138_134372.jpg?sign=1739534312-sprnaH325htDWTTMjJidDIwBFlBhuiMS-0-05284e15c08c2b865fae5d2bf3e272da)
图8-16 前向传播的实现过程
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P138_134374.jpg?sign=1739534312-nlHMdV1z9owCxLmV9TtKQXCqBOZO851D-0-b0fb92882bba40686388ab65a8e955c7)
图8-17 反向传播的实现过程
第46行代码将l1进行求导计算和l1_error相乘,得到l1_delta。
第48行代码更新第1个权重syn1。syn1是连接输出层与隐藏层的权重,l1.T是第1个隐藏层的转置矩阵,通过l1.T转置矩阵与l2_delta进行矩阵点积运算,然后更新第1个权重syn1。
第49行代码更新第0个权重syn0。syn0是连接输入层与隐藏层的权重,l0.T是输入层的转置矩阵,通过l0.T转置矩阵与l1_delta误差值进行矩阵点积运算,然后更新第0个权重syn0。
如图8-18所示,ANN_V2.py构建的神经网络包括输入层(第0层)、隐藏层(第1层)、输出层(第2层),输出层与隐藏层之间有一个权重syn1,隐藏层和输入层之间有一个权重syn0,权重不断地进行更新。从最后的预测结果看,预测结果是不错的。
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P139_24174.jpg?sign=1739534312-LAVRyMwPCSvihnG4C3RE0Isef5R1ZKeB-0-27f0664cb65166355f30b64cd0319cad)
图8-18 ANN_V2.py神经网络结构图