联系热线
【目录】
什么是优化器
optimizer的属性
optimizer的方法
在损失函数中会得到一个loss值,即模型输出与真实值之间的一个差异
对于loss值我们通常会采取pytorch中的自动求导autograd模块去求取模型当中的参数的梯度grad
优化器拿到梯度grad后,进行一系列的优化策略去更新模型参数,使得loss值不断下降
学习参数通常是指权值或者偏置bias,更新的策略在神经网络中通常都会采用梯度下降方法
两个自变量x,y,输出值为z可以认为是山坡的高度
多元函数的导数都是偏导,对x的偏导就是,固定y,求在x方向上的变化率;而方向有无穷多个,不仅仅x、y方向上有变化率,其他方向任意方向上都有变化率
梯度的方向为方向导数变化率最大的方向(方向为使得方向导数取得最大值的方向),朝着斜坡最陡峭的地方去。模长即为方向导数的值,即为方向导数的变化率。
梯度就是在当前这个点增长最快的一个方向,模长就是增长的速度。梯度的负方向就是下降最快的。
- defaults里面是基本的超参数:lr、momentum、dampending、weight_decay、nesterov等,用字典打包;
- state没有训练时为空;
- param_groups是一个list,list中每一个元素是一个字典,字典中的'params'才是我们真正的参数,'params'里面的数据又是一个list,list中的一个元素又是一组参数
- params里面的内容为网络的可学习参数,比如,00表示第一个卷积层权重,01表示bias
- _step_count记录更新次数,以便于调整训练策略,例如每更新100次参数,对学习率调整一下
在每一次反向传播过程中,需要对梯度张量进行清零,因为pytorch张量梯度不能自动清零,是累加的
执行,对参数进行更新
优化器保存的权值地址和真实权值的地址是一样的,说明优化器是通过地址去寻找权值
通过参数组param_groups的概念来设置不同的参数有不同的学习率,在模型的fineturn中非常实用
state_dict()和load_state_dict()用于保存模型信息和加载模型信息,用于模型断点的续训练,一般在10个epoch或50个epoch的时候要保存当前的状态信息;
state_dict()返回两个字典,一个state用于保存缓存信息packed_state和一个param_groups;
load_state_dict()用于接收一个state_dict放在优化器中;