调整学习速率的方法有很多,如何直观的感受学习率随迭代的变化趋势,以及如何获取当前epoch的学习速率 lr。我们可以把学习速率随 epoch的变化画出来。
import torch
import monai
import matplotlib.pyplot as plt
model = monai.networks.nets.UNet(dimensions=3, in_channels=1, out_channels=2, channels=(16, 32, 64, 128, 256),
strides=(2, 2, 2, 2))
optimizer = torch.optim.Adam(model.parameters(), lr=0.02)
# scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=50, gamma=0.5)
# 每step_size步之后衰减为 lr * gamma
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[100, 200, 300, 500], gamma=0.1)
# 在 milestones epoch处衰减, lr * gamma
lr_list = []
epochs = 600
for epoch in range(epochs):
lr = scheduler.get_last_lr()[0]
print('lr: %.6f, epoch: %d'%(lr, epoch))
lr_list.append(lr)
optimizer.step()
scheduler.step()
print(set(lr_list))
plt.plot(list(range(epochs)), lr_list)
plt.xlabel("epoch")
plt.ylabel("lr")
plt.title("LR")
plt.show()
从图上可以看出,lr 每100 epoch 变化一次,每次下降为之前的0.1倍。 比如 0-100 epoch,, 100-200 epoch, 。