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

文章目录

  • 摘要
  • 1. Torch优化器的学习率更新
  • 2. Paddle优化器学习率更新
  • 参考资料

摘要

以前优化器的学习率总是设置为恒定不变的,现在想让优化器学习率随着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"] # 可以看到当前优化器的学习率

深度学习学习记录-优化器的学习率的更新_第1张图片
对模型设置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张图片
可以观察到,每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()))

深度学习学习记录-优化器的学习率的更新_第3张图片

参考资料

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

你可能感兴趣的:(深度学习,深度学习,学习,python)