PyTorch之八—优化器&学习率
时间:2024-03-11 12:19:20 浏览:
次
torch.optim 优化器
使用:
构建一个对象。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。 你需要给它一个包含了需要优化的参数(必须都是对象)的iterable。然后,你可以设置optimizer的参 数选项,比如学习率,权重衰减,等等。
当然 你也可以为每个参数单独设置选项: 不直接传入Variable的iterable,而是传入dict的iterable。
这意味着model.base的参数将会使用1e-2的学习率,model.classifier的参数将会使用1e-3的学习率,并且0.9的momentum将会被用于所有的参数。
进行单次优化 optimizer.step()
所有的optimizer都实现了step()方法,这个方法会更新所有的参数。一旦梯度被如backward()之类的函数计算好后,我们就可以调用这个函数。
使用闭包优化 optimizer.step(closure)
一些优化算法例如Conjugate Gradient和LBFGS需要重复多次计算函数,因此你需要传入一个闭包去允许它们重新计算你的模型。这个闭包应当清空梯度, 计算损失,然后返回。
常用的优化器函数
如下优化器我只写了几个常用的,详情请查看请点击
参数:
– 待优化参数的iterable或者是定义了参数组的dict
– 用于计算平方梯度的运行平均值的系数(默认:0.9)
– 为了增加数值计算的稳定性而加到分母里的项(默认:1e-6)
– 在delta被应用到参数更新之前对它缩放的系数(默认:1.0)
– 权重衰减(L2惩罚)(默认: 0)
参数:
– 待优化参数的iterable或者是定义了参数组的dict
– 学习率(默认: 1e-2)
– 学习率衰减(默认: 0)
– 权重衰减(L2惩罚)(默认: 0)
参数:
– 待优化参数的iterable或者是定义了参数组的dict
– 学习率(默认:1e-3)
– 用于计算梯度以及梯度平方的运行平均值的系数(默认:0.9,0.999)
– 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
– 权重衰减(L2惩罚)(默认: 0)
实现随机梯度下降算法(momentum可选)
参数:
– 待优化参数的iterable或者是定义了参数组的dict
– 学习率
– 动量因子(默认:0)
– 权重衰减(L2惩罚)(默认:0)
– 动量的抑制因子(默认:0)
– 使用Nesterov动量(默认:False)
学习率 与 学习率调节
以下的学习率调节,用的较多的是前两个。
在PyTorch中关于调整学习率 提供了几种基于时期数调整学习率的方法
将每个参数组的学习速率设置为给定函数的初始lr倍。当last_epoch = -1时,将初始lr设置为lr。
参数:
- 包装优化器。
- 在给定整数参数epoch的情况下计算乘因子的函数或此类函数的列表,每个组对应一个优化器参数.param_groups。
- 最后一个epoch的索引。默认值:-1。
将每个参数组的学习速率设置为每个step_size epochs由gamma衰减的初始lr。当last_epoch = -1时,将初始lr设置为lr。
参数:
optimizer (Optimizer) – 包装优化器。
step_size (int) – 学习率衰减的时期。
gamma (float) – 学习率衰减的乘法因子。默认值:0.1。
last_epoch (int) – 最后一个epoch的索引。 默认值:-1。
将每个参数组的学习速率设置为初始学习速率,当epoch数达到某个里程碑时,该速率将被gamma衰减。当最后一个epoch=-1时,将初始lr设置为lr。
参数:
optimizer (Optimizer) – 包装优化器。
milestones (list) – 时期指数列表。必须增加。
gamma (float) – 学习率衰减的乘法因子。默认值:0.1。
last_epoch (int) – 最后一个epoch的索引。 默认值:-1。
将每个参数组的学习速率设置为每个历代伽马衰减的初始学习速率。当最后一个epoch=-1时,将初始lr设置为lr。
参数:
optimizer (Optimizer) - 包装优化器。
gamma(float) - 学习率衰减的乘法因子。
last_epoch(int) - 上一个纪元的索引。默认值:-1。
关于余弦退火计划(调度器)学习率曲线请点击
使用余弦退火计划设置每个参数组的学习速率,其中,
η
m
a
x
\eta_{max}
η m a x ? 设置为初始学习速率,
T
c
u
r
T_{cur}
T c u r ? 是自上次在SGDR中重新启动以来的 epoch 数:
η
t
=
η
m
i
n
+
1
2
(
η
m
a
x
?
η
m
i
n
)
(
1
+
cos
?
(
T
c
u
r
T
m
a
x
π
)
)
\eta_t = \eta_{min} + \frac{1}{2}(\eta_{max} - \eta_{min})(1 + \cos(\frac{T_{cur}}{T_{max}}\pi))
η t ? = η m i n ? + 2 1 ? ( η m a x ? ? η m i n ? ) ( 1 + cos ( T m a x ? T c u r ? ? π ) )
当 last_epoch = -1时,将初始lr设置为lr。
参数:
optimizer (Optimizer) - 包装优化器。
T_max(int) - 最大迭代次数。
eta_min(浮动) - 最低学习率。默认值:0。
last_epoch(int) - 上一个纪元的索引。默认值:-1。
关于其他的学习率调度器请查看 https://pytorch.org/docs/stable/optim.html
小案例