本文主要讲解pytorch中的optim累以及lr_schdule类和optim优化器的配置,使用方法。
在https://blog.csdn.net/dss_dssssd/article/details/83892824中提及优化算法的使用步骤,
-
optimer = optim.SGD()
先初始化 -
反向传播更新参数
- 将上次迭代计算的梯度值清0
optimizer.zero_grad()
- 反向传播,计算梯度值
loss.backward()
- 更新权值参数
optimizer.step()
一. 使用optimizer的步骤
SGD源码: https://pytorch.org/docs/stable/_modules/torch/optim/sgd.html
- 将上次迭代计算的梯度值清0
1. 构造optimizer
1.1 初始化函数__init__
:
参数:
-
params: 包含参数的可迭代对象,必须为Tensor
-
其余的参数来配置学习过程中的行为
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr = 0.0001)
1.2. per-parameter 选择
不是传入Tensor的可迭代对象,而是传入
dict
的可迭代对象,每一个字典定义一个独立的参数组,每一个dict
必须包含一个params
键,和一系列与该优化函数对应的参数。
optim.SGD([
{
'params': model.base.parameters()},
{
'params': model.classifier.parameters(), 'lr': 1e-3}
], lr=1e-2, momentum=0.9)
上述代码,model.base
中的参数更新使用learning rate
为1e-2
的SGD算法,而model.classifier
中的参数更新使用learning rate
为 1e-2
, momentum为0.9
的SGD算法
下面用一个两层的线性回归的例子说明一下:
输入为[11, 1], 第一层为[1, 10], 第二层为[10, 1],最后的输出为[11,1]。在优化算法中,第一层和第二层分别使用不同的优化器配置方案。