在 pytorch 中提供了 torch.optim 方法优化我们的神经网络,torch.optim 是实现各种优化算法的包。
1. torch.optim.SGD
这个优化器实现的是实现随机梯度下降算法。
SGD 是最基础的优化方法,普通的梯度下降法, 需要重复不断的把整套数据放入神经网络 NN 中训练, 这样容易陷入鞍点而使优化无法继续。当
我们使用 SGD 会把数据拆分后再分批(batch)不断放入 NN 中计算. 每次只计算批数据的损失来优化参数,这样既兼顾了性能也兼顾了并行性。
"""
params (iterable) – 待优化参数的 iterable 对象或者是定义了参数组的 dict。
lr (float) – 学习率,学习率较小时,收敛到极值的速度较慢; 学习率较大时,容易在搜索过程中发生震荡。
momentum (float, 可选) – 动量因子,默认为0,即采用指数平均的权重系数,默认不采用。
weight_decay (float, 可选) –
dampening (float, 可选) –
nesterov (bool, 可选) –
"""
class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)
举个例子:
import torch
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
optimizer.zero_grad() # 每个参数对应的 grad 属性清 0
loss_fn(model(input), target).backward()
optimizer.step() # 进行参数更新