比较与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,
    verbose=False
)

更多内容详见torch.optim.lr_scheduler.StepLR

torch.optim.lr_scheduler.MultiStepLR

torch.optim.lr_scheduler.MultiStepLR(
    optimizer,
    milestones,
    gamma=0.1,
    last_epoch=-1,
    verbose=False
)

更多内容详见torch.optim.lr_scheduler.MultiStepLR

mindspore.nn.piecewise_constant_lr

mindspore.nn.piecewise_constant_lr(
    milestone,
    learning_rates
)

更多内容详见mindspore.nn.piecewise_constant_lr

差异对比

PyTorch(torch.optim.lr_scheduler.StepLR):分段设置学习率,torch.optim.lr_scheduler.StepLR通过传入step_size,每隔固定的step_size,学习率乘以gamma, verbose 为True时,每一次更新打印相关信息。

MindSpore(mindspore.nn.piecewise_constant_lr):传入milestones的step数值列表和对应的学习率设置值列表,达到step数值,学习率取对应的值。最终返回一个学习率的列表,作为优化器的输入。

分类

子类

PyTorch

MindSpore

差异

参数

参数1

optimizer

-

PyTorch应用的优化器,MindSpore无此参数

参数2

step_size

milestone

MindSpore分段更新学习率的step列表,PyTorch使用固定的step值

参数3

gamma

-

PyTorch衰减学习率的参数,MindSpore无此参数

参数4

last_epoch

-

MindSpore无此参数

参数5

verbose

-

PyTorch的 verbose 为True时,每一次更新打印相关信息。MindSpore无此参数

参数6

-

learning_rates

MindSpore设置学习率的列表

PyTorch(torch.optim.lr_scheduler.MultiStepLR):torch.optim.lr_scheduler.MultiStepLR通过传入milestones的step数值列表,达到step数值,学习率乘以gamma。使用时,优化器作为输入,在训练过程中调用 step 方法进行数值的更新。 verbose 为True时,每一次更新打印相关信息。

MindSpore(mindspore.nn.piecewise_constant_lr):传入milestones的step数值列表和对应的学习率设置值列表,达到step数值,学习率取对应的值。最终返回一个学习率的列表,作为优化器的输入。

分类

子类

PyTorch

MindSpore

差异

参数

参数1

optimizer

-

PyTorch应用的优化器,MindSpore无此参数

参数2

milestones

milestone

分段更新学习率的step列表,功能一致,参数名不同

参数3

gamma

-

PyTorch衰减学习率的参数,MindSpore无此参数

参数4

last_epoch

-

MindSpore无此参数

参数5

verbose

-

PyTorch的 verbose 为True时,每一次更新打印相关信息。MindSpore无此参数

参数6

-

learning_rates

MindSpore设置学习率的列表

代码示例

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)