7.1 优化器的定义、基本属性和基本方法

 

 

 

上节课讲了损失函数,损失函数是衡量模型的输出与真实标签之间的差异。有了这个差异之后,怎么使用这个loss更新模型中的参数,使得我们的loss逐步降低呢?这就是优化器的工作。

 

 

1. 什么是优化器

 

更新的策略,通常采用梯度下降。

 

导数:

方向导数:

梯度:

 

 

 

2. optimizer的基本属性(4个)

 

defaults:优化器的超参数,主要存储一些学习率、momentum的值等等

state:用来存储参数的一些缓存。例如使用momentum的时候,需要用到前几次的梯度,就存在这。

params_groups:管理参数组。是一个list。list的每一个元素是一个字典。字典中有一个'params'的key,其对应的值才是真正的参数。

_step_count:更新的次数。

 

 

 

3. optimizer的基本方法(5个)

3.1 zero_grad()

清空所管理参数的梯度。

参数是一个张量,张量有梯度grad.

pytorch有一个特性:张量梯度是不会清零的。在每一次反向传播采用autograd计算梯度的时候,是累加的。

所以应当在梯度求导之前(backward之前)把梯度清零。

 

函数实现:

 

3.2 step()

执行一步更新。

step()会采用梯度下降等策略,具体的策略有很多种,例如随机梯度下降法,momentum加动量的方法,自适应学习率的方法等。后面会讲到具体执行哪些操作。

 

3.3 add_param_group()

添加一组参数到优化器中。

优化器可以管理很多参数,这些参数是可以分组的。我们对不同组的参数可以有不同的超参数的设置。例如在模型的fintune中,对模型前面特征提取的部分希望他的学习率小一些,更新的慢一些;而后面的自己定义的全连接层,希望学习率更大一些。这样就可以把整个模型分成两组,一组是前面特征提取的参数,一组是后面全连接层的参数。

 

 

3.4 state_dict()

获取优化器当前状态信息字典。

返回的字典只有两个key。

 

3.5 load_state_dict()

加载状态信息字典

 

上面这两个方法的作用就是为了模型断点时续训练。

 

 

 

 

 

 

 

 

 

以上是 7.1 优化器的定义、基本属性和基本方法 的全部内容, 来源链接: utcz.com/a/53073.html

回到顶部