深度学习学习记录-优化器的学习率的更新

  • Post author:
  • Post category:其他




摘要

以前优化器的学习率总是设置为恒定不变的,现在想让优化器学习率随着epoch进行改变。本文使用Torch框架和Paddle框架对优化器的学习率进行更新。



1. Torch优化器的学习率更新

建立一个简单的模型

import torch
model = torch.nn.Conv2d(3,3,1)
optim = torch.optim.Adam(model.parameters(),lr=1e-2)

optim.param_groups[0]["lr"] # 可以看到当前优化器的学习率

在这里插入图片描述

对模型设置Adam优化器,默认学习率为1e-2。现在想让学习率在训练的时候,进行改变。那么可以借助,

torch.optim.lr_scheduler

来实现

# 对上边的优化器创建优化策略,每2个epoch进行更新一次,缩放因子为0.1
scheduler = torch.optim.lr_scheduler.StepLR(optim, step_size=2, gamma=0.1, last_epoch=-1)
for epoch in range(10):
    scheduler.step(epoch)
    print("Epoch : {}/{} | lr : {}".format(epoch+1,10,optim.param_groups[0]["lr"]))

在这里插入图片描述

可以观察到,每2个epoch,学习率按缩放因子进行一次改变。



2. Paddle优化器学习率更新

目标是实现与Torch相同的功能

import paddle
paddle.set_device("cpu")

model = paddle.nn.Conv2D(3,3,1)
# paddle要先定义一个可变化的学习率,传给优化器。与torch不太一样
scheduler = paddle.optimizer.lr.StepDecay(learning_rate=1e-2,step_size=2,gamma=0.2)
optim = paddle.optimizer.Adam(learning_rate=scheduler,parameters=model.parameters())
print(optim.get_lr())
for epoch in range(10):
    scheduler.step(epoch)
    print("Epoch : {}/{} | lr : {:.8f}".format(epoch+1,10,optim.get_lr()))

在这里插入图片描述



参考资料


[1]. 诗人藏夜里. pytorch优化器学习率调整策略以及正确用法. 2019



版权声明:本文为qq_44009107原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。