参考:https://blog.csdn.net/zisuina_2/article/details/103258573
这个作者的demo让我理解更深了,一般都是先定义模型,然后把模型的参数放到梯度更新优化器,然后这个梯度更新优化器是有学习率的,接着把这个梯度更新优化器放到调整学习率的优化器中,这样在进行反向梯度更新时,会更新梯度优化器中模型的参数,然后在设定的条件时又会调整学习率的优化器中的学习率的值。如下代码: model = AlexNet(num_classes=2) # 定义模型 optimizer = optim.SGD(params = model.parameters(), lr=0.01) # 定义梯度更新优化器
#在指定的epoch值,如[5,20,25,80]处对学习率进行衰减,lr = lr * gamma scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=[5,20,25,80], gamma=0.1) # 梯度更新优化器放到学习率优化器
plt.figure() x = list(range(100)) y = []
for epoch in range(100): ? ? scheduler.step() ? ? lr = scheduler.get_lr() ? ? print(epoch, scheduler.get_lr()[0]) ? ? y.append(scheduler.get_lr()[0]) plt.xlabel("epoch") plt.ylabel("learning rate") plt.plot(x,y)
|