| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> CNN实验报告 -> 正文阅读 |
|
[人工智能]CNN实验报告 |
不同模块对CNN的影响介绍本次实验将使用两个CNN网络模型,分别在MNIST数据集上测试,并不断微调网络结构和参数,查看这些操作对模型的影响。 实验环境
网络结构本次实验使用两种网络结构
默认情况用以下参数作为初始的默认情况训练15个epoch。可将默认情况下的训练结果当做一个基准,在其后不断对网络进行微调(每次仅对结构做一个改变),观察结果变化情况。
结果如下表所示:
多层卷积网络效果好于单层卷积网络,前者最终准确率优于后者,这是因为网络深度加深,使模型的拟合能力加强,对特征的提取和压缩也做的更好,这是多层网络的优势。 (一)添加BN在默认情况下,在网络中添加batch normalization,查看此时的网络结构与效果
效果如下表所示:
添加batch normalization后,单、多层网络与默认情况相比表现均有所提升,准确率上升1个百分点以上,且模型的收敛速度更快,说明BN对模型训练有加速效果。特别需要注意的是,在多层网络上加速收敛效果尤为明显,通过BN操作,将初始epoch的测试准确率提高至94%,与未加BN的比较好了太多了。 (二)激活函数原网络使用ReLU激活函数,下面更换不同的激活函数 1. tanh将ReLU更改为tanh,展示效果
效果如下表所示:
tanh激活函数的表现一般,两种网络的准确率均有下降,但下降幅度不大。 2. LeakyReLU将ReLU更改为LeakyReLU
模型效果并无很大的改善。 3. sigmoid将ReLU改为sigmoid
使用sigmoid激活函数时,表现非常差,单层网络准确度下降十几个百分点,而多层网络无法正常工作,test loss值不断跳跃,变化幅度缓慢,说明使用sigmoid激活函数造成了梯度饱和,无法对参数值正常迭代,导致准确率无法上升,仅为11.35%,说明在这个多层网络中,不能使用sigmoid作为激活函数。 (三)正则化L2正则在网络中添加L2正则化,pytorch很容易可以实现,定义优化器时加入参数weight_decay,即设定L2正则化中的 λ \lambda λ数值,这里设置为1e-4,观察效果,即
训练结果变化不明显,但是可以看到,初始准确率较默认情况还是有上升,有一定的加速作用。 DropOut在网络中加入DropOut层,将丢弃概率设置为0.3
单层网络添加DropOut使最终的准确率下降了,而在多层网络中准确率有所上升,可能原因为单层网络中模型拟合能力较多层网络弱,在丢弃后对数据的拟合能力进一步下降,导致准确率下降,而多层网络丢弃恰好改进了过拟合,使得最终准确率有所上升。 (四)优化器Adam将原本的SGD优化器改换为Adam优化器
Adam优化器的表现优于SGD,二者的准确率均有提升,但是在训练后期都出现了过拟合问题,test loss和test acc起伏较大。 (五)学习率衰减learning_rate=0.01将学习率提至0.01
提高学习率改善了网络效果,模型收敛速度非常快,但最后出现了过拟合问题,下面使用学习率衰减进行改进。 学习率衰减更改学习率为0.01,定义每训练3个epoch,学习率衰减至原来的0.2
通过学习率衰减的做法,不仅提升了收敛速度,在单层网络中,过拟合有所改善,在多层网络中,几乎消除了过拟合问题,并且对识别准确率也有了改进,两个模型分别提高了1%~2%不等。 (六)参数初始化torch.nn中对卷积层、全连接层的参数初始化方式在我的前一篇文章正则化与参数初始化对神经网络的影响有介绍。 从这篇文章中可以知道无论是Linear还是Conv2d,其weight参数 w i w_i wi?均是利用kaiming_uniform_来初始化的,下面分别将 w e i g h t weight weight初始化方式替换为kaiming_normal_和xavier_normal_,将bias替换为常数0来观察对网络的影响。 kaiming_normal_kaiming_normal_说明
使用下面代码改变模型初始化方式
使用kaiming_normal_初始化对单层网络改进较大,对多层网络改进较小,但是单层网络训练后期有过拟合的趋势,二者的收敛速度都有较大的提升。 xavier_normal_xavier_normal_说明
更改方式与kaiming_normal_相同
与kaiming_normal_的效果相近,对最后准确率有提升,但是单层网络有过拟合趋势。 (七)综合测试将以上六个操作中对模型改进较大的几个操作进行组合,在多层网络上尝试,改进操作如下
最终效果为
最后测试准确率上升1.8%,无过拟合,改进效果明显。 一个说明 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 20:35:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |