本文主要讲解pytorch中的optim累以及lr_schdule类和optim优化器的配置,使用方法。
在https://blog.youkuaiyun.com/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]。在优化算法中,第一层和第二层分别使用不同的优化器配置方案。

本文详细解析PyTorch中的optim模块,包括optimizer的构造、zero_grad()、loss.backward()和step()的使用。通过实例展示了如何为不同层设置不同的优化器参数,如SGD的momentum和learning_rate。还提到了Conjugate Gradient和LBFGS等特殊优化算法的调用方式。
最低0.47元/天 解锁文章
4054





