![企业级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=1739293594-HbSLKxGDFp1jRfm9NupzDJ61il4VKHt4-0-4f486abfce237eb44b81236ad2428dfe)
在Spyder集成开发环境中运行ANN_V2.py代码,运行结果如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P137_130874.jpg?sign=1739293594-9O7BX6aGbjMjwfwGwLxg4lj2L98fOj5o-0-452dca75b334a2e3b67c762365e091a1)
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=1739293594-LzIIC3L9YGWpuTNY51zTy49WxILnpjrY-0-0ba686d2f6f0ee2bd8d2735facdaa4c4)
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=1739293594-LA948vyCCxTKlwmdq6JxM7sntNFkCODj-0-a94d55076882082cf30013dc2f3ba81a)
在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=1739293594-013DIdYI9TrweD0hZA0W5ClF3KyYdEvG-0-4f567b6013c209ca9d0a25e3d4bb7bf0)
图8-16 前向传播的实现过程
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P138_134374.jpg?sign=1739293594-pf4Ip7qHdRBHxLUAG4vaTUEk3VKAHu8f-0-a4de30e234dc5d72aa4bbb9981b494a6)
图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=1739293594-WdVbKEd91SL9ZzTKwenCVoFJeTLjBtjE-0-67de7cb9211008b035cf841d921cae28)
图8-18 ANN_V2.py神经网络结构图