探索不同学习率对训练精度和Loss的影响

简介: 探索不同学习率对训练精度和Loss的影响

验证精度、验证Loss的影响

1 问题

在探索mnist数据集过程中,学习率的不同,对我们的实验结果,各种参数数值的改变有何变化,有何不同。

学习率对精度和损失的影响研究。

训练周期=100

学习率= [0.1, 0.01, 0.001, 0.0001]

(1) 不同学习率下的训练精度曲线;

(2) 不同学习率下的训练Loss曲线;

(3) 不同学习率下的验证精度曲线;

(4) 不同学习率下的验证Loss曲线;


2 方法

在前面的学习过程中,我们已经完成了固定学习率lr=0.001情况下,训练精度,验证精度,训练loss,验证loss的结果,所以说我们只需要加一个循环,通过遍历学习率列表:lrs = [0.1, 0.01, 0.001, 0.0001],用列表来保存数据结果就行,在最后通过可视化matlibplot,来展示结果。

新增的代码(学习率的遍历,画图):

lrs = [0.1, 0.01, 0.001, 0.0001]
for i in range(len(lrs)):
   optimizer=torch.optim.SGD(net.parameters(), lr=lrs[i],momentum=0.5)
lens = len(Train_Acc_list)
b = int(lens/4)

plt.subplot(2,2,1)
plt.plot(list(range(1,101)), Train_Acc_list[:b], color='red')
plt.plot(list(range(1,101)),Train_Acc_list[b:2*b],color='blue')
plt.plot(list(range(1,101)), Train_Acc_list[2*b:3*b], color='yellow')
plt.plot(list(range(1,101)), Train_Acc_list[3*b:], color='green')
plt.xlabel('epoch',size=18)
plt.ylabel('Accuracy',size=18)
plt.title('不同学习率下的训练精度曲线',size=20)
plt.legend(labels=['lr=0.1','lr=0.01','lr=0.001','lr=0.0001'])

plt.subplot(2, 2, 2)
plt.plot(list(range(1, 101)), Train_loss_list[:b], color='red')
plt.plot(list(range(1, 101)), Train_loss_list[b:2 * b], color='blue')
plt.plot(list(range(1, 101)), Train_loss_list[2 * b:3 * b], color='yellow')
plt.plot(list(range(1, 101)), Train_loss_list[3 * b:], color='green')
plt.xlabel('epoch', size=18)
plt.ylabel('Loss', size=18)
plt.title('不同学习率下的训练Loss曲线', size=20)
plt.legend(labels=['lr=0.1', 'lr=0.01', 'lr=0.001', 'lr=0.0001'])

plt.subplot(2, 2, 3)
plt.plot(list(range(1, 101)), Val_Acc_list[:b], color='red')
plt.plot(list(range(1, 101)), Val_Acc_list[b:2 * b], color='blue')
plt.plot(list(range(1, 101)), Val_Acc_list[2 * b:3 * b], color='yellow')
plt.plot(list(range(1, 101)), Val_Acc_list[3 * b:], color='green')
plt.xlabel('epoch', size=18)
plt.ylabel('Accuracy', size=18)
plt.title('不同学习率下的验证精度曲线', size=20)
plt.legend(labels=['lr=0.1', 'lr=0.01', 'lr=0.001', 'lr=0.0001'])

plt.subplot(2, 2, 4)
plt.plot(list(range(1, 101)), Val_loss_list[:b], color='red')
plt.plot(list(range(1, 101)), Val_loss_list[b:2 * b], color='blue')
plt.plot(list(range(1, 101)), Val_loss_list[2 * b:3 * b], color='yellow')
plt.plot(list(range(1, 101)), Val_loss_list[3 * b:], color='green')
plt.xlabel('epoch', size=18)
plt.ylabel('Loss', size=18)
plt.title('不同学习率下的验证Loss曲线', size=20)
plt.legend(labels=['lr=0.1', 'lr=0.01', 'lr=0.001', 'lr=0.0001'])

plt.show()
plt.savefig('pic.svg')

运行结果图:

3 结语

根据最后的可视化展示图可以清晰地看到:

  1. 在学习率为0.1的时候,相较于学习率为0.01、0.001、0.0001,训练精度都是较差的,特别是在训练次数相对于较少时,而且在第二张训练Loss曲线中,训练次数较少时, Loss较大,在第三张图也能明显看出,验证精度曲线,学习率为0.1的曲线变化较大,且精度不是很高,在第四张图上,Loss变化较大,且基本比其他三条线高
  2. 从第一张图上来看,学习率为0.01、0.001、0.0001时,精度基本上维持在94%左右,第二张图来看,Loss也基本相差不大。
    在第三张图上的验证精度曲线,学习率为0.0001情况下,随着训练次数的增加,精度基本不变,训练精度为0.001情况下,精度随训练次数的增加有少浮的上下移动。
    在第四张图上来看,学习率为0.001、0.0001情况下,验证Loss随训练次数的变化,基本保存一致。
  3. 综上所述,学习率为0.001、0.0001的情况下,各项指标的精度较高,Loss较低,更加稳定。
目录
相关文章
|
自然语言处理 算法 数据挖掘
自蒸馏:一种简单高效的优化方式
背景知识蒸馏(knowledge distillation)指的是将预训练好的教师模型的知识通过蒸馏的方式迁移至学生模型,一般来说,教师模型会比学生模型网络容量更大,模型结构更复杂。对于学生而言,主要增益信息来自于更强的模型产出的带有更多可信信息的soft_label。例如下右图中,两个“2”对应的hard_label都是一样的,即0-9分类中,仅“2”类别对应概率为1.0,而soft_label
自蒸馏:一种简单高效的优化方式
|
机器学习/深度学习 人工智能 数据处理
一文速通自监督学习(Self-supervised Learning):教机器自我探索的艺术
一文速通自监督学习(Self-supervised Learning):教机器自我探索的艺术
2754 0
|
域名解析 网络协议 测试技术
IP、掩码、网关、DNS1、DNS2到底是什么东西,ping telnet测试
理解IP地址、子网掩码、默认网关和DNS服务器的概念是有效管理和配置网络的基础。通过使用ping和telnet命令,可以测试网络连通性和服务状态,快速诊断和解决网络问题。这些工具和概念是网络管理员和IT专业人员日常工作中不可或缺的部分。希望本文提供的详细解释和示例能够帮助您更好地理解和应用这些网络配置和测试工具。
6249 2
|
Linux 编解码 Python
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
AV1是一种高效免费的视频编码标准,由AOM联盟制定,相比H.265压缩率提升约27%。各大流媒体平台倾向使用AV1。本文介绍了如何在Linux环境下为FFmpeg集成AV1编解码库libaom、libdav1d和libsvtav1。涉及下载源码、配置、编译和安装步骤,包括设置环境变量以启用这三个库。
982 3
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
|
网络协议 网络虚拟化 虚拟化
虚拟机和物理机的网络通信疑虑问题
物理机的ip和虚拟机上的window的ip不是同一个子网,如何实现相互通信的?各自又是如何进行进入公网进行通信的?
417 0
|
项目管理 数据安全/隐私保护
GitLab中用户的五种权限 Guest、Reporter、Developer、Master、Owner
GitLab中用户的五种权限 Guest、Reporter、Developer、Master、Owner
|
搜索推荐
在线网络搜索
在线网络搜索是指通过互联网连接到远程服务器,使用搜索引擎对网络上的信息进行检索和查找。这种搜索方式是我们日常生活中最常用的搜索方式。在线网络搜索可以帮助用户在短时间内找到大量相关的信息,提高信息获取的效率。以下是在线网络搜索的使用方法、适用场景和示例:
1905 8
|
JavaScript 前端开发 编译器
【TypeScript技术专栏】深入理解TypeScript编译过程
【4月更文挑战第30天】TypeScript编译过程包括解析、类型检查、语义分析和代码生成四个步骤。解析阶段将源代码转为AST;类型检查确保代码符合类型规则,捕获类型错误;语义分析检查代码逻辑一致性;最后生成JavaScript代码。这一过程保证了代码的语法、类型和语义正确性,提升开发效率和代码质量。了解此过程有助于开发者更好地理解和解决问题。
356 0
|
Linux 网络安全 数据安全/隐私保护
|
XML 自然语言处理 IDE
一杆到底:DSL 领域特定语言
一、DSL了解1、DSL介绍DSL(Domain Specific Language)是针对某一领域,具有受限表达性的一种计算机程序设计语言。 常用于聚焦指定的领域或问题,这就要求 DSL 具备强大的表现力,同时在使用起来要简单。说到DSL,大家也会自然的想到通用语言(如Java、C等)。为什么没有一种语言同时 兼具『简洁』和『业务表达』能力呢?从信息论本质上来讨论这个问题,每个语言的程序都可以抽
18164 0
一杆到底:DSL 领域特定语言