torch.optim2
pytorch
本文字数:869 字 | 阅读时长 ≈ 3 min

torch.optim2

pytorch
本文字数:869 字 | 阅读时长 ≈ 3 min

optimizer 优化器一节中讲解了四个优化器,分别是 GD, SGD, SGDM, Adagrad, RMSProp, Adam,在 PyTorchtorch.optim 中包含了后五个,这里讲解这五个优化器的 PyTorch 使用方法

1. torch.optim.SGD

torch.optim.SGD 包含了 SGD 以及 SGDM

torch.optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, weight_decay=0, nesterov=False)

首先我们看一下 PyTorch 官方示例然后讲解各个参数的含义

optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
optimizer.zero_grad()
loss_fn(model(input), target).backward()
optimizer.step()

第一步输入构建 SGD 优化器,第二步将上一步中优化器的梯度清 0(这一步是必须的,因为在每一次循环时梯度会进行累加,也就是说如果不清 0 的话这次所求的梯度是上次与这次的累加),第三步进行反向传播,第四步根据梯度来更新参数

其中 params=model.parameters() 表示优化模型的参数,lr=0.1 表示学习率为 0.1,momentum=0.9 表示采用 SGDM 优化算法,还记得之前我们讲过的 SGDM 先求出移动步长,在进行更新,其实还有另一种更新,这两种更新思路一样,但是就是学习率的位置不同,如下图所示。这种更新就是设置 nesterov=True,教程中也给出了两种更新的区别,不过一般来说我们都采取之前讲过的更新方法,也就是下图的第一种,注意其中的$\mu$就是我们的 momentum 因子

还有两个参数,一个是 weight_decay,另一个是 dampening,第一个是给权重加入 L2 惩罚,之后来介绍这一点。第二个是动量抑制因子,这个好像没怎么用到,就不作介绍。

2. torch.optim.Adagrad

torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0, eps=1e-10)

这里就不详细叙述了,因为感觉用这个优化的很少,而且我将 SGD 换成 Adagrad 之后感觉效果还不好(可能是学习率直接降的非常非常低),而且使用之后感觉 lr_decay 参数没什么用

3. torch.optim.RMSprop

torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)

4. torch.optim.Adam

torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)

9月 09, 2024