比较与torch.optim.lr_scheduler.StepLR和torch.optim.lr_scheduler.MultiStepLR的功能差异
torch.optim.lr_scheduler.StepLR
torch.optim.lr_scheduler.StepLR(
optimizer,
step_size,
gamma=0.1,
last_epoch=-1
)
torch.optim.lr_scheduler.MultiStepLR
torch.optim.lr_scheduler.MultiStepLR(
optimizer,
milestones,
gamma=0.1,
last_epoch=-1
)
mindspore.nn.piecewise_constant_lr
mindspore.nn.piecewise_constant_lr(
milestone,
learning_rates
)
使用方式
PyTorch:分段设置学习率,torch.optim.lr_scheduler.StepLR
通过传入step_size,每隔固定的step_size,学习率乘以gamma;torch.optim.lr_scheduler.MultiStepLR
通过传入milestones的step数值列表,达到step数值,学习率乘以gamma。使用时,优化器作为输入,在训练过程中调用step
方法进行数值的更新。
MindSpore:传入milestones的step数值列表和对应的学习率设置值列表,达到step数值,学习率取对应的值。最终返回一个学习率的列表,作为优化器的输入。
代码示例
from mindspore import nn
# In MindSpore:
milestone = [2, 5, 10]
learning_rates = [0.1, 0.05, 0.01]
output = nn.piecewise_constant_lr(milestone, learning_rates)
print(output)
# Out:
# [0.1, 0.1, 0.05, 0.05, 0.05, 0.01, 0.01, 0.01, 0.01, 0.01]
# In torch:
import numpy as np
import torch
from torch import optim
model = torch.nn.Sequential(torch.nn.Linear(20, 1))
optimizer = optim.SGD(model.parameters(), 0.1)
# 使用step_lr
step_lr = optim.lr_scheduler.StepLR(optimizer, step_size=2, gamma=0.9)
# 使用multi_step_lr
multi_step_lr = optim.lr_scheduler.MultiStepLR(optimizer, milestones=[30, 80], gamma=0.9)