![企业级AI技术内幕:深度学习框架开发+机器学习案例实战+Alluxio解密](https://wfqqreader-1252317822.image.myqcloud.com/cover/212/36862212/b_36862212.jpg)
9.3 人工智能框架的改进优化
ANN_V4.py进行了系数alpha的优化,ANN_V5.py和ANN_V4.py的代码没有太大的区别,它们alpha系数更新权重的核心算法是一样的。ANN_V5.py提供了synapse_0、synapse_1权重变化率方向的次数统计,将这一次权重的变化率与上一次的权重变化率进行比较,如果两者的变化率方向一致,则计数为0;如果两者的变化率方向相反,则计数为1。然后将统计的计数进行累加。
ANN_V5.py的源代码如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P149_130891.jpg?sign=1739292289-gy0a2AmyrL0PAIDap9PsAuo4RJIXnBuN-0-718e4eafdfae7cc0c8b685d050fd91c1)
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P150_130892.jpg?sign=1739292289-TOYgKh6pEbcg1Aa0OOIakbkYhASPzufz-0-76ed19501b90c2fa4f832638853ff4fd)
在Spyder中运行ANN_V5.py,运行结果如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P150_130893.jpg?sign=1739292289-pAuaPHFwcG7ijrgGFaQaeYaKM2O7sf0q-0-8c4b65c6fa0216a71c7562cf99c79c9f)
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P151_130894.jpg?sign=1739292289-f8WYXKX1k3VpfVFY08fcaon5kQ3DnNEW-0-84937a5e45b84474e5310c19ea59e1ac)
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P152_130895.jpg?sign=1739292289-1VbjqKHkr3iyOqvHQSltBlc2OvwbJuFv-0-7bcb2857428a5bd2975e0bc47f0425e8)
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P153_130896.jpg?sign=1739292289-E1642WijL5SB4bVQ0QmiLvqHEc9H3ySP-0-c6507c5422d90231bbda58b9b2bbbebd)
从ANN_V5.py的运行结果看,隐藏层神经元节点数为4,alpha等于10的时候,效果最好,误差值达到0.001 312 740 628 335 676 4。
如图9-16所示,在TensorFlow的可视化图中,可以通过单击“+”“–”按钮随意增减隐藏层及神经元节点。
我们在代码中也可以增加神经网络的隐藏层及神经元节点数,ANN_V6.py在ANN_V4.py的基础上对隐藏层神经元节点数进行了优化。
ANN_V6.py的源代码如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P153_130897.jpg?sign=1739292289-O6X9Hi8i92gB2bILV54aIEdrX5iVmCPn-0-9e006616f20eabd9eddcfc0a4e489707)
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P154_28658.jpg?sign=1739292289-vYJhWLBB5x0pxdlRCl9Sw2rAOiVa7E3n-0-7a346f62f0010a58d93d66393d151b2c)
图9-16 在TensorFlow可视化图中增加神经元节点
在ANN_V6.py的源代码中:
第5行代码设置隐藏层的神经元节点数为32。
第31、32行代码将设置的神经元节点数传入权重synapse_0、synapse_1,进行权重矩阵的初始化赋值。
ANN_V6.py实现的神经网络结构如图9-17所示。
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P155_29027.jpg?sign=1739292289-gdlL1WjEXDlB3rNusr7OGvcs0W9cMxQo-0-7d0c0cd09ee682477aab72b6354491a4)
图9-17 增加到32个神经元
在Spyder中运行ANN_V6.py代码,运行结果如下:
![](https://epubservercos.yuewen.com/A2E645/19549640608913906/epubprivate/OEBPS/Images/Figure-P155_130900.jpg?sign=1739292289-x8AnJ7FZvDDvlEWGz0ymcbp0l7jw7iz5-0-435c54776168227cee0f112e0bdee266)
从ANN_V6.py运行结果看,当隐藏层神经元节点数增至32,alpha为10的时候,得到的误差值是0.000 939 536 491 871 338 3,这是目前获得的最好的效果。ANN_V6.py中增加的只是隐藏层的节点,就提高了神经元网络的精确度。
神经网络优化还有一些其他方式,例如,调整内存结构对神经网络的使用、调整偏爱因子、正则化处理(regularization)、随机丢弃一部分神经元及连接(Dropout)、GPU加速等。