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

   日期:2024-12-27    作者:chenfengchem 移动:http://mip.riyuangf.com/mobile/quote/73747.html

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

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

 

(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

验证的完整过程


 

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号