您好,欢迎访问这里是您的网站名称官网!
新闻资讯

服务热线400-123-4567

常见问答

首页 > 新闻资讯 > 常见问答

【PyTorch基础教程9】优化器optimizer和训练过程

作者:佚名 发布时间:2024-03-12 11:31:57点击:

(1)每个优化器都是一个类,一定要进行实例化才能使用,比如:

 

(2)optimizer:

  • 三个属性:存储的是优化器的超参数(如学习速率、momentum等);:参数的缓存;:管理的参数组,是一个list,其中每个元素是一个字典,顺序是params,lr,momentum,dampening,weight_decay,nesterov。
  • 其他方法:
    • :清空所管理参数的梯度,Pytorch的特性是张量的梯度不自动清零,因此每次反向传播后都需要清空梯度。
    • :执行一步梯度更新,参数更新。
    • :添加参数组
    • :获取优化器当前状态信息字典

(3)optimizer在一个神经网络的epoch中需要实现下面两个步骤:
梯度置零,梯度更新。

 

深度学习的目标是通过不断改变网络参数,使得参数能够对输入做各种非线性变换拟合输出,本质上就是一个函数去寻找最优解,只不过这个最优解是一个矩阵,而如何快速求得这个最优解是深度学习研究的一个重点——以经典的resnet-50为例,它大约有2000万个系数需要进行计算,那么我们如何计算出来这么多的系数,有以下两种方法:

(1)第一种是最直接的暴力穷举一遍参数,这种方法的实施可能性基本为0,堪比愚公移山plus的难度。
(2)为了使求解参数过程更加快,人们提出了第二种办法,即就是是BP+优化器逼近求解。

因此,优化器就是根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值,使得模型输出更加接近真实标签。

Pytorch提供了一个优化器的库,在这里面给我们提供了十种优化器。

  • torch.optim.ASGD
  • torch.optim.Adadelta
  • torch.optim.Adagrad
  • torch.optim.Adam
  • torch.optim.AdamW
  • torch.optim.Adamax
  • torch.optim.LBFGS
  • torch.optim.RMSprop
  • torch.optim.Rprop
  • torch.optim.SGD
  • torch.optim.SparseAdam

而以上这些优化算法均继承于,下面我们先来看下所有优化器的基类。定义如下:

 
 
  • :存储的是优化器的超参数,例子如下:
 
  • :参数的缓存,例子如下
 
  • :管理的参数组,是一个list,其中每个元素是一个字典,顺序是params,lr,momentum,dampening,weight_decay,nesterov,例子如下
 
 
  • :清空所管理参数的梯度,Pytorch的特性是张量的梯度不自动清零,因此每次反向传播后都需要清空梯度。
 
  • :执行一步梯度更新,参数更新
 
  • :添加参数组
 
  • :加载状态参数字典,可以用来进行模型的断点续训练,继续上次的参数进行训练
 
  • :获取优化器当前状态信息字典
 
 
 

结果为:

 
 
 

完成了上述设定后就可以加载数据开始训练模型了。之前在DataLoader构建完成后介绍了如何从中读取数据,在训练过程中使用类似的操作即可,区别在于此时要用for循环读取DataLoader中的全部数据
训练过程:

 

完整的:

 

验证/测试的流程基本与训练过程一致,不同点在于:

  • 需要预先设置,以及将model调至eval模式
  • 不需要将优化器的梯度置零
  • 不需要将loss反向回传到网络
  • 不需要更新optimizer

验证的完整过程:

 
 

(1)pytorch官方文档
(2)datawhale notebook
(3)Coding基础概念:.pkl文件是什么?python
(4)pytorch文档阅读(四)如何在GPU上训练

相关标签: 参数 优化

平台注册入口