诚信为本,市场在变,诚信永远不变...
  咨询电话:400-123-4567

公司新闻

学习记录 --- Pytorch优化器


个人学习总结,持续更新中……

官方教程
【学习笔记】Pytorch深度学习—优化器(一)
【学习笔记】Pytorch深度学习—优化器(二)

Pytorch的优化器:
管理并更新模型中可学习参数的值,使得模型输出更接近真实标签。

分析
其中,可学习参数指 权值 和 偏置bias;
其次,优化器最主要的2大功能:
(1)管理:指优化器管理哪一部分参数;
(2)更新:优化器当中具有一些优化策略,优化器可采用这些优化策略更新模型中可学习参数的值;这一更新策略,在神经网络中通常都会采用梯度下降法。
什么是梯度下降法

<总结>
Pytorch中优化器optimizer 管理着模型中的可学习参数,并采用梯度下降法 更新着可学习参数的值。

以Adam为例:

 
 
 
 
 

优化器超参数,用来存储学习率、momentum的值等等;

 
 

参数的缓存,如momentum的缓存;采用momentum时会使用前几次更新时使用的梯度,也就是前几次的梯度,把前几次的梯度值缓存下来,在本次更新中使用;

 
 

管理的参数组;优化器最重要的属性,已经知道优化器是管理可学习参数,这一系列可学习参数就放在param_groups这一属性中,同时,这一参数组定义为list。
param_groups=[{‘params’:param_groups,‘lr’: 0.01,}]
因此,param_groups是1个list。而在list[ ] 中,每一个元素又是1个字典{ } ,这些字典中有很多key,其中最重要的key是-‘params’,只有’params’当中才会存储训练模型的参数。

 
 
 

清空所管理参数的梯度
Pytorch中tensor特性:tensor张量梯度不自动清零

已知参数param是1个特殊的张量,张量当中都会有梯度grad。由于Pytorch中张量tensor的梯度grad是不会自动清零的,它会在每一次backward反向传播时采用autograd计算梯度,并把梯度值累加到张量的grad属性中的。
由于Pytorch中的grad属性不自动清零,因此每计算1次梯度就自动累加到grad属性中造成错误;因此,一定要在使用完梯度后或者进行梯度求导(反向传播)之间通过zero_grad进行清零。
在这里插入图片描述

 
 

执行一步更新
当计算得到Loss,利用Loss进行backward反向传播计算各个参数的梯度之后,采用step()进行一步更新,更新权值参数。step()会采用梯度下降的策略,具体方法有很多种,比如随机梯度下降法、momentum+动量方法、autograd自适应学习率等等一系列优化方法。

 
 
 

添加参数组
add_param_group()添加一组参数到优化器中。已知优化器管理很多参数,这些参数是可以分组;对于不同组的参数,有不同的超参数设置,例如在某一模型中,希望特征提取部分的权值参数的学习率小一点,学习更新慢一点,这时可以把特征提取的参数设置为一组参数,而对于后面全连接层,希望其学习率大一点,学习快一点。这时,可以把整个模型参数设置为两组,一组为特征提取部分的参数,另一部分是全连接层的参数,对这两组设置不同的学习率或超参数,这时就需要用到参数组概念。

 
 
 

在这里插入图片描述

 
 

在这里插入图片描述

 
 

在这里插入图片描述

这种方法,每个网络的学习率是相同的。

 
 

这样可以很容易的让多个网络的学习率各不相同。

 
 
 
 
 
 

torch.optim.lr_scheduler:调整学习率

平台注册入口