torch之optimizer.step() 与 scheduler.step() 的用法
首先需要明确optimzier优化器的作用, 形象地来说,优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值的作用,这也是机器学习里面最一般的方法论。
1.optimizer.step()
optimizer.step()通常用在每个mini-batch之中,可以根据具体的需求来做。只有用了optimizer.step(),模型才会更新。
2.scheduler.step()
torch.optim.lr_scheduler提供了几种方法来根据 epoch 的数量调整学习率。学习率调度应该在优化器更新后应用;例如,您应该这样编写代码:
例子:文章来源:https://www.toymoban.com/news/detail-567243.html
model = [Parameter(torch.randn(2, 2, requires_grad=True))]
optimizer = SGD(model, 0.1)
scheduler = ExponentialLR(optimizer, gamma=0.9)
for epoch in range(20):
for input, target in dataset:
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
optimizer.step()
scheduler.step()
大多数学习率调度器可以称为背靠背(也称为链式调度器)。结果是每个调度器一个接一个地应用到前一个调度器获得的学习率上。
例子:文章来源地址https://www.toymoban.com/news/detail-567243.html
model = [Parameter(torch.randn(2, 2, requires_grad=True))]
optimizer = SGD(model, 0.1)
scheduler1 = ExponentialLR(optimizer, gamma=0.9)
scheduler2 = MultiStepLR(optimizer, milestones=[30,80], gamma=0.1)
for epoch in range(20):
for input, target in dataset:
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
optimizer.step()
scheduler1.step()
scheduler2.step()
到了这里,关于torch之optimizer.step() 与 scheduler.step() 的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!