美文网首页
pytorch学习率的优化方法

pytorch学习率的优化方法

作者: 一位学有余力的同学 | 来源:发表于2020-05-13 17:04 被阅读0次

    torch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率(learning rate)的方法。一般情况下我们会设置随着epoch的增大而逐渐减小学习率从而达到更好的训练效果。
    学习率的调整应放在optimizer之后。即,在训练时加入学习率优化方法的书写形式一般是:

    import torch
    import torch.nn as nn
    from torch.optim.lr_scheduler import LambdaLR
    
    initial_lr = 0.1
    
    class model(nn.Module):
        pass
    
    net = model()
    
    optimizer = torch.optim.Adam(net.parameters(), lr = initial_lr)
    scheduler = LambdaLR(optimizer, lr_lambda=lambda epoch: 1/(epoch+1))
    
    #训练
    for epoch in range(100):
        optimizer.zero_grad()
        optimizer.step()
        scheduler.step()
    

    更多optimizer相关的介绍可以参考博客。下面介绍pytorch部分内置的学习率优化方法。

    1. torch.optim.lr_scheduler.StepLR

    torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)
    

    optimizer:优化器
    step_size: 衰减步长
    gamma:衰减系数
    last_epoch: 最后一个epoch的index,如果是训练了很多个epoch后中断了,继续训练,这个值就等于加载的模型的epoch。默认为-1表示从头开始训练,即从epoch=1开始。
    该学习率优化器的作用是,使学习率每过step_size个epoch,学习率变为原来的gamma倍(last_epoch=-1的情况下)。

    2. torch.optim.lr_scheduler.ReduceLROnPlateau

    torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, 
    verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)
    

    optimizer: 优化器
    mode: mode为min时,当监测目标停止减少,lr减小,当监测目标停止增加,lr增加,默认mode=min
    factor: new_lr = lr * factor,默认为0.1
    patience: 学习率不再减小时能容忍的epoch数,默认为10
    verbose: 如果为True,打印出标准输出,默认为False
    threshold: 评价为新的最优质的阈值,只关注有价值的变化,默认为1e-4
    threshold_mode: One of rel, abs. In rel mode, dynamic_threshold = best * ( 1 + threshold ) in ‘max’ mode or best * ( 1 - threshold ) in min mode. In abs mode, dynamic_threshold = best + threshold in max mode or best - threshold in min mode. Default: ‘rel’.,
    cooldown: 当LR降低之后经过多少个epoch恢复原始的操作,默认为0
    min_lr: lr的最小边界,默认为0
    eps: 当新的学习率和旧的学习率相差eps之内就忽略,默认1-e8

    本文只给出了部分学习率的优化方法,更多优化方法可以参考官方博客

    参考博客
    torch.optim.lr_scheduler:调整学习率
    动态调整Learning Rate:TORCH.OPTIM.LR_SCHEDULER

    相关文章

      网友评论

          本文标题:pytorch学习率的优化方法

          本文链接:https://www.haomeiwen.com/subject/jdsinhtx.html