torch.optim

参考 torch.optim - 云+社区 - 腾讯云

目录

如何使用一个优化器

构建它

预参数选项

采取优化步骤

算法

class torch.optim.Optimizer(params, defaults)[source]

add_param_group(param_group)[source]

load_state_dict(state_dict)[source]

state_dict()[source]

zero_grad()[source]

class torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)[source]

class torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0)[source]

step(closure)[source]

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

step(closure)[source]

class torch.optim.AdamW(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0.01, amsgrad=False)[source]

step(closure)[source]

class torch.optim.SparseAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08)[source]

step(closure)[source]

class torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)[source]

step(closure)[source]

class torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0)[source]

step(closure)[source]

class torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-05, tolerance_change=1e-09, history_size=100, line_search_fn=None)[source]

step(closure)[source]

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

step(closure)[source]

class torch.optim.Rprop(params, lr=0.01, etas=(0.5, 1.2), step_sizes=(1e-06, 50))[source]

step(closure)[source]

class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)[source]

step(closure)[source]

如何调整学习率

class torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)[source]

load_state_dict(state_dict)[source]

state_dict()[source]

class torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)[source]

class torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)[source]

class torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1)[source]

class torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)[source]

class torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)[source]

class torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_momentum=True, base_momentum=0.8, max_momentum=0.9, last_epoch=-1)[source]

get_lr()[source]


如何使用一个优化器

为了使用torch.optim,你必须构建一个优化对象,那将会保持现有的状态,并且基于计算的来更新参数。

构建它

为了构建一个优化器,你必须给定一个用来优化的参数的迭代器(所有应该是变量s)。然后,你能指定优化指定选项,例如学习率、权重衰减等。

注意:

If you need to move a model to GPU via .cuda(), please do so before constructing optimizers for it. Parameters of a model after .cuda() will be different objects with those before the call.In general, you should make sure that optimized parameters live in consistent locations when optimizers are constructed and used.

如果你通过.cuda()将一个模型移动到GPU,对它请在构建优化器之前这么做。.cuda()之后的模型参数与调用之前的参数是不同的对象。通常情况下,你应该确保使得优化在连续的位置上,当优化器构建和使用的时候。

例:

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr=0.0001)

预参数选项

Optimizers also support specifying per-parameter options. To do this, instead of passing an iterable of Variable s, pass in an iterable of dict s. Each of them will define a separate parameter group, and should contain a params key, containing a list of parameters belonging to it. Other keys should match the keyword arguments accepted by the optimizers, and will be used as optimization options for this group.

Optimizers也支持预参数选项。这么做,代替传递一个可迭代的变量s,传入一个可迭代的字典s。它们的每一个都会定一个分离的参数组,并且应该包含一个参数键,包含一个属于它的参数列表。其余键应该匹配优化器接受的关键字参数,并将作为这个组的优化选项。

注意:

注意你依然能够传递关键字参数。它们将会被用作默认值,在不重写它们的组中。当你仅仅想改变一个单一的选项时这很有用,同时保持参数组之间的所有其他一致。例如,当需要指定每层的学习速率时,这是非常有用的:

optim.SGD([
                {'params': model.base.parameters()},
                {'params': model.classifier.parameters(), 'lr': 1e-3}
            ], lr=1e-2, momentum=0.9)

This means that model.base’s parameters will use the default learning rate of 1e-2, model.classifier’s parameters will use a learning rate of 1e-3, and a momentum of 0.9 will be used for all parameters.

这意味着model.base的参数将会使用默认的学习率1e-2,model.classifier的参数将会适应1e-3,对所有参数动量都设置为0.9。

采取优化步骤

所有优化器实现一个step()方法用来更新参数。它的使用方法有两种:

optimizer.step()

这是大多数优化器都支持的简单版本。这个函数只调用一次,梯度计算用backward()来实现。

例:

for input, target in dataset:
    optimizer.zero_grad()
    output = model(input)
    loss = loss_fn(output, target)
    loss.backward()
    optimizer.step()
optimizer.step(closure)

一些优化算法例如联合提盒LBFGS需要重新评估函数多次,所以你必须传递一个闭包允许他们重新计算你的模型。闭包应该清除梯度,计算损失,并返回它。

例:

for input, target in dataset:
    def closure():
        optimizer.zero_grad()
        output = model(input)
        loss = loss_fn(output, target)
        loss.backward()
        return loss
    optimizer.step(closure)

算法

class torch.optim.Optimizer(params, defaults)[source]

所有优化器的基类。

Warning

需要将参数指定为具有确定性排序、在运行之间保持一致的集合。不满足这些属性的对象的例子是集合和字典值的迭代器。

参数:

  • params (iterable) – 一个可迭代的对象或者字典。指定了什么张量应该优化。

  • defaults – (dict): 包含优化选项默认值的字典(当一个优化器组不指定他们时才使用)

add_param_group(param_group)[source]

向Optimizer参数组加入一个参数组。当预先训练好的网络作为冻结层进行微调时,这是有用的,并且可以在训练过程中添加到优化器中。

参数:

  • param_group (dict) – 沿着组指定哪个张量应该优化。

  • optimization options. (specific) – 指定

load_state_dict(state_dict)[source]

载入优化器的状态。

参数:

  • state_dict (dict) – 优化器状态。应该是调用state_dict()的返回对象。

state_dict()[source]

以字典的形式返回优化器的状态。

It contains two entries:

它包含两个部分:

  • state - 保持目前优化器状态的字典。它的内容和优化器的类别不同。

  • param_groups - 包含所有优化器组的字典。

step(closure)[source]

执行一个单一的优化步骤(参数更新)。

参数:

  • closure (callable) – 重新评估并且返回损失的闭包。对大多数优化器是可选的。

zero_grad()[source]

清楚所有优化后的torch.Tensor的梯度。

class torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)[source]

实现Adadelta算法,实现这个算法的文章为:ADADELTA: An Adaptive Learning Rate Method

参数:

  • params (iterable) – 参数的可迭代性,以优化或dicts定义参数组

  • rho (float, optional) – 用来计算平方梯度平均值的系数(默认是0.9)

  • eps (float, optional) – 将项加到分母以提高数值稳定性(默认是1e-6)

  • lr (float, optional) – 在delta应用到参数之前对其进行缩放的系数(默认值:1.0)

  • weight_decay (float, optional) – 体重衰减(L2惩罚)(默认值:0)

tep(closure)[source]

执行一个单一的优化步骤(参数更新)。

参数:

  • closure (callable) – 重新评估并且返回损失的闭包。对大多数优化器是可选的。

class torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0)[source]

Implements Adagrad algorithm.

实现Adagrad算法,论文为:Adaptive Subgradient Methods for Online Learning and Stochastic Optimization

参数:

  • params (iterable) – 参数的可迭代性,以优化或dicts定义参数组

  • lr (float, optional) – 学习率(默认为1e-2)

  • lr_decay (float, optional) – 学习率衰减(默认值:0)

  • weight_decay (float, optional) – 权重衰减(L2 乘法)(默认:0)

step(closure)[source]

执行一个单一的优化步骤(参数更新)。

参数:

  • closure (callable) – 重新评估并且返回损失的闭包。对大多数优化器是可选的。

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

实现Adam算法,论文为:Adam:

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wanderer001

ROIAlign原理

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值