神经网络优化器,主要是为了优化我们的神经网络,使他在我们的训练过程中快起来,节省社交网络训练的时间。在pytorch中提供了torch.optim方法优化我们的神经网络,torch.optim是实现各种优化算法的包。最常用的方法都已经支持,接口很常规,所以以后也可以很容易地集成更复杂的方法。
要使用torch.optim,您必须构造一个optimizer对象。这个对象能保存当前的参数状态并且基于计算梯度更新参数。
要使用torch.optim,您必须构造一个optimizer对象。这个对象能保存当前的参数状态并且基于计算梯度更新参数
要构造一个Optimizer,你必须给它一个包含参数(必须都是Variable对象)进行优化。然后,您可以指定optimizer的参 数选项,比如学习率,权重衰减等。
例子1:
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9) optimizer = optim.Adam([var1, var2], lr = 0.0001)为每个参数单独设置选项 Optimizer也支持为每个参数单独设置选项。若想这么做,不要直接传入Variable的iterable,而是传入dict的iterable。每一个dict都分别定 义了一组参数,并且包含一个param键,这个键对应参数的列表。其他的键应该optimizer所接受的其他参数的关键字相匹配,并且会被用于对这组参数的 优化。
注意:
您仍然可以将选项作为关键字参数传递。它们将被用作默认值,在不覆盖它们的组中。当您只想改变一个选项,同时保持参数组之间的所有其他选项一致时,这很有用。
例如,当我们想指定每一层的学习率时,这是非常有用的:
optim.SGD([ {'params': model.base.parameters()}, {'params': model.classifier.parameters(), 'lr': 1e-3} ], lr=1e-2, momentum=0.9)这意味着model.base参数将使用默认的学习速率1e-2,model.classifier参数将使用学习速率1e-3,并且0.9的momentum将会被用于所有的参数。 例子2
class torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0)实现Adagrad算法。
在在线学习和随机优化的自适应子梯度方法中被提出。
参数:
params (iterable) – 用于优化的可以迭代参数或定义参数组 lr (float, 可选) – 学习率(默认: 1e-2) lr_decay (float, 可选) – 学习率衰减(默认: 0) weight_decay (float, 可选) – 权重衰减(L2范数)(默认: 0) step(closure) 执行单个优化步骤。参数:
closure (callable,可选) – 重新评估模型并返回损失的闭包。
class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)[source]实现Adam算法。
它在Adam: A Method for Stochastic Optimization中被提出。
参数:
params (iterable) – 用于优化的可以迭代参数或定义参数组 lr (float, 可选) – 学习率(默认:1e-3) betas (Tuple[float, float], 可选) – 用于计算梯度运行平均值及其平方的系数(默认:0.9,0.999) eps (float, 可选) – 增加分母的数值以提高数值稳定性(默认:1e-8) weight_decay (float, 可选) – 权重衰减(L2范数)(默认: 0)例子3 closure (callable,可选) – 重新评估模型并返回损失的闭包。
class torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)[source]实现RMSprop算法。
由G. Hinton在他的课程中提出.
中心版本首次出现在Generating Sequences With Recurrent Neural Networks.
参数:
params (iterable) – 用于优化的可以迭代参数或定义参数组 lr (float, 可选) – 学习率(默认:1e-2) momentum (float, 可选) – 动量因子(默认:0) alpha (float, 可选) – 平滑常数(默认:0.99) eps (float, 可选) – 增加分母的数值以提高数值稳定性(默认:1e-8) centered (bool, 可选) – 如果为True,计算中心化的RMSProp,通过其方差的估计来对梯度进行归一化 weight_decay (float, 可选) – 权重衰减(L2范数)(默认: 0)