| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 基于CNN的手写字符识别demo中参数的设置 -> 正文阅读 |
|
[人工智能]基于CNN的手写字符识别demo中参数的设置 |
目录 前言之前已经用最简单的CNN网络实现了对MNIST数据集的分类问题,并且通过对参数以及网络结构的优化使模型的性能达到了一个不错的状态,本文将对所有参数进行调整比较,分析不同参数在CNN网络训练中的影响,主要是通过控制变量法,对loss以及acc曲线的分析,选择出较好的参数,并分析其原因。 以下是之前优化模型以及参数的loss以及acc曲线,最终在测试集上的准确率有0.9844左右,并且收敛的不错。 为了比较出同组的不同参数间模型的性能差距,会调整其他的参数,适当的降低模型性能,来比较这组参数对模型性能的影响。 ?1.优化算法选择?主要对比的是随机梯度下降算法和Adam算法,RMSProp一般情况下跟Adam算法差不多,我们对这三种优化器进行对比。 对loss以及acc可视化 ? ?可以看到随机梯度下降算法SGD在训练集上表现很差,测试集上准确率也很低,很明显是初始学习率太小,本身SGD算法下降的方向不是沿着正确方向下降,而是不停的在正确方向摆动,为了对比, 将这三个优化器学习率增大一点 ?可视化losss以及acc ? ??可以看出,Adam与SGD以及RMSprop算法在最终结果上差不多,因为任务比较简单,性能差不多,但是Adam拟合的很快,准确率效率也很高,其次是RMSprop算法,有时候不稳定,但是总体上来说比SGD算法好些,而SGD虽然拟合的很慢,但是最终的结果上跟其他算法差不多。对于优化算法的比较以及原理可以看我之前的博客 ??2.初始学习率参数学习率会影响每次迭代更新的步长,理论上来说学习率越大更新的越快,但是在最后更新就会出现在最优值左右大幅度摆动的情况并且产生过拟合,但是如果学习率过低,那么梯度会更新的很慢,于是学习率的设置要合理,下面用SGD算法,设置lr=0.01,lr=0.05,lr=0.1,分别比较模型的性能。 对loss以及acc可视化 ?可以看出lr=0.01时,模型loss下降的很慢准确率也上升的很慢,但是当lr=0.1时,模型梯度更新的很快,但是loss值下降的并不平滑,因此选用lr=0.05比较合适。 ?? 3.batch_size参数样本的数量如果过少模型在训练集上表现很好,但是在测试集上会表现的比较差,会出现过拟合现象,当使用较大的batch_size是一种避免过拟合现象的办法,但是不是所有时候都适合。 对loss以及acc可视化 ?通过对不同batch_size下的loss和acc可视化分析,当batch_size=100时,准确率很高,但是已经出现过拟合现象,但是当batch_size=500时,曲线已经区域平滑,当batch_size=1000时,曲线已经很平滑了,也就是说,这个模型在处理MNIST数据集时,在算法允许的情况下,batch_size越多模型的性能是越好的,因为大的batch_size能缓和过拟合。 4.数据预处理参数
一般来说对数据预处理让它归一,会使数据传入模型时处理更加方便,会提升模型的性能,打乱数据会使模型的过拟合现象下降。 对loss以及acc可视化 ?可以看出加入了Normalize以及shuffle在模型的性能上是有不少的提升的,以及过拟合现象相对于没有加入这些参数是有所缓和的,因此一般情况下,训练模型都应该加入此操作。具体的原理以及实现可以看我博客。 ?5.正则化参数的选择5.1Regularization参数?正则化方法之一是Regularization,主要的做法就是在损失值上加入噪声,理论上来说这种做法可以缓解过拟合。如下对不加入噪声以及weight_decay=1e-3,weight_decay=1e-4的性能进行比较。 对loss以及acc可视化 ?可以看出加入的weight_decay=1e-3时有不错的效果,已经很大程度上降低了过拟合现象,也就是说明,噪声的加入要合理,不能太大也不能太小。 5.2.dropout参数的选择?dropout是直接在神经元的传递之间舍弃一些值,减少了神经网络的复杂程度,一下通过对舍弃概率p的取值来分析他对模型的影响。 对loss以及acc可视化 ?可以看出当概率p值比较大的时候,loss值并不能很好的下降,导致在测试集上准确率偏低,但是如果没有加入dropout也就是p值很小的时候,已经出现过拟合了,当p=0.5时,拟合的效果不错,既保证了准确率,又缓和了过拟合。关于正则化的理解以及原理,可以看我博客 6.归一化以及激活函数选择归一层一般都是在池化层之后使用的,用来将数据聚拢,但是又不改变数据的结构,CNN网络中激活函数一般都是Relu,用来加入非线性因素。如下对不加入优化层,以及只加入激活函数Relu以及加入归一层以及Relu函数做对比。 对loss以及acc可视化 ?可以看出使用了Bn+Relu优化后准确率提升很多,而且没有过拟合现象,之加入激活函数Relu在训练步数多了后也有明显的效果,因此在使用CNN搭建网络的时候,尽量多实用Bn以及Relu函数优化。具体有关的理论知识可以看我博客。 7.网络层数参数对于网络层数一般来说是越层数越多,效果就越好,因为,通过对中间层可视化分析,发现层数越多,通道越多,提取出来的特征就越细致,因此识别的应该是越准确的。 先做一个demo,分别取conv=1,conv=2,conv=3, 对loss以及acc可视化 ?可以看出两层网络确实比三层网络更加的优秀,但是三层网络却没有理论上的效果,而且性能很低,接着对网络中的参数进行更改, 将网络层越深的网络向下取样的操作减少,保证输入全连接层的特征数量更多, 分别取conv=2,conv=3,conv=4, 对loss以及acc可视化 ?可以看出,层数越深,网路的性能就越好,不仅拟合的越快,而且准确率更高。 8.?权重初始化参数为了避免神经元具有相同的输出,我们使用独特权重。我们还可以随机选择权重,避免每个周期后的损失都陷于局部最低点。 以下使用三种权重初始化的方法,进行权重初始化。 uniform:
uniform_rule:
normal:
可视化loss以及acc? ?发现使用正态(normal)或者uniform(均匀),在训练集上拟合的稍稍快一下,在测试集上的准确率也有一定的提升,说明正态以及均匀对模型的性能有着一定的提升。 ?总结通过对CNN训练时各种参数的调节以及尝试,更加清楚的了解到了各种参数对模型性能的影响,但是还是有不少地方的理解比较模糊,过后会继续深入的了解。 |
|
|
上一篇文章 查看所有文章 |
|
开发:
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/17 21:16:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |