IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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中参数的设置

目录

前言

?1.优化算法选择

??2.初始学习率参数

3.batch_size参数

4.数据预处理参数

?5.正则化参数的选择

5.1Regularization参数

5.2.dropout参数的选择

6.归一化以及激活函数选择

7.网络层数参数

8.?权重初始化参数

?总结


前言

之前已经用最简单的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.数据预处理参数

将数据预处理归一化以及打乱数据torchvision.transforms.Normalize((0.1307,), (0.3081,)) shuffle=True

一般来说对数据预处理让它归一,会使数据传入模型时处理更加方便,会提升模型的性能,打乱数据会使模型的过拟合现象下降。

对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:

m.weight.data.uniform_(0.0, 1.0) 
m.bias.data.fill_(0)

uniform_rule:

n = m.in_features
y = 1.0/np.sqrt(n)
m.weight.data.uniform_(-y, y)
m.bias.data.fill_(0)

normal:

m.weight.data.normal_(0.0, 0.05)
m.bias.data.fill_(0)

可视化loss以及acc?

?发现使用正态(normal)或者uniform(均匀),在训练集上拟合的稍稍快一下,在测试集上的准确率也有一定的提升,说明正态以及均匀对模型的性能有着一定的提升。

?总结

通过对CNN训练时各种参数的调节以及尝试,更加清楚的了解到了各种参数对模型性能的影响,但是还是有不少地方的理解比较模糊,过后会继续深入的了解。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章           查看所有文章
加:2021-07-25 11:39:27  更:2021-07-25 11:44:33 
 
开发: 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年12日历 -2024/12/22 10:45:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码