optimizer和scheduler

optimizer = optim.SGD(pg, lr=args.lr, momentum=0.9, weight_decay=5E-5)
lf = lambda x: ((1 + math.cos(x * math.pi / args.epochs)) / 2) * (1 - args.lrf) + args.lrf  # cosine
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf)

optimizer指定使用哪个优化器;

scheduler对优化器的学习率进行调整。

只有用了optimizer.step(),模型才会更新;而scheduler.step()是对lr进行调整。optimizer.step()通常用在每个mini-batch里面,而scheduler.step()通常用在epoch里面。

optimizer种类有:

  • optim.SGD
  • optim.Adam

scheduler种类有:

pytorch有torch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率(learning rate)的方法。一般情况下我们会设置随着epoch的增大而逐渐减小学习率从而达到更好的训练效果。学习率的调整应该放在optimizer更新之后。

  • torch.optim.lr_scheduler.LambdaLR
  • torch.optim.lr_scheduler.StepLR
  • torch.optim.lr_scheduler.MultiStepLR
  • torch.optim.lr_scheduler.ExponentialLR

参考:训练时的学习率调整:optimizer和scheduler - 知乎 (zhihu.com)

你可能感兴趣的:(pytorch学习笔记,pytorch,深度学习)