淘宝联盟返利网站怎么做,淘宝联盟如何建设个人网站,一整套vi设计,苏州设计公司排行榜目录 一、为什么要调整学习率#xff1f;1.1 class _LRScheduler 二、pytorch的六种学习率调整策略2.1 StepLR2.2 MultiStepLR2.3 ExponentialLR2.4 CosineAnnealingLR2.5 ReduceLRonPlateau2.6 LambdaLR 三、学习率调整小结四、学习率初始化 一、为什么要调整学习率#xff… 目录 一、为什么要调整学习率1.1 class _LRScheduler 二、pytorch的六种学习率调整策略2.1 StepLR2.2 MultiStepLR2.3 ExponentialLR2.4 CosineAnnealingLR2.5 ReduceLRonPlateau2.6 LambdaLR 三、学习率调整小结四、学习率初始化 一、为什么要调整学习率 学习率learning rate控制更新的步伐 一般在模型训练过程中在开始训练的时候我们会设置学习率大一些随着模型训练epoch的增加学习率会逐渐设置小一些。 1.1 class _LRScheduler 学习率调整的父类函数 主要属性 • optimizer关联的优化器 • last_epoch记录epoch数 • base_lrs记录初始学习率 主要方法 • step()更新下一个epoch的学习率该操作必须放到epoch循环下面 • get_lr()虚函数计算下一个epoch的学习率 二、pytorch的六种学习率调整策略
2.1 StepLR 功能等间隔调整学习率 主要参数 • step_size调整间隔数 • gamma调整系数 调整方式lr lr * gamma 代码实现
import torch
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plttorch.manual_seed(1)LR 0.1
iteration 10
max_epoch 200
# ------------------------------ fake data and optimizer ------------------------------weights torch.randn((1), requires_gradTrue)
target torch.zeros((1))optimizer optim.SGD([weights], lrLR, momentum0.9)# ------------------------------ 1 Step LR ------------------------------
# flag 0
flag 1
if flag:scheduler_lr optim.lr_scheduler.StepLR(optimizer, step_size50, gamma0.1) # 设置学习率下降策略50轮下降一次每次下降10倍lr_list, epoch_list list(), list()for epoch in range(max_epoch):lr_list.append(scheduler_lr.get_lr())epoch_list.append(epoch)for i in range(iteration):loss torch.pow((weights - target), 2)loss.backward()optimizer.step()optimizer.zero_grad()scheduler_lr.step() # 学习率更新策略plt.plot(epoch_list, lr_list, labelStep LR Scheduler)plt.xlabel(Epoch)plt.ylabel(Learning rate)plt.legend()plt.show()输出结果 因为我们设置每50个epoch降低一次学习率所以在7774554 2.2 MultiStepLR 功能按给定间隔调整学习率 主要参数 • milestones设定调整时刻数 • gamma调整系数 调整方式lr lr * gamma 代码实现
flag 1
if flag:milestones [50, 125, 160] # 设置学习率下降的位置scheduler_lr optim.lr_scheduler.MultiStepLR(optimizer, milestonesmilestones, gamma0.1)lr_list, epoch_list list(), list()for epoch in range(max_epoch):lr_list.append(scheduler_lr.get_lr())epoch_list.append(epoch)for i in range(iteration):loss torch.pow((weights - target), 2)loss.backward()optimizer.step()optimizer.zero_grad()scheduler_lr.step()plt.plot(epoch_list, lr_list, labelMulti Step LR Scheduler\nmilestones:{}.format(milestones))plt.xlabel(Epoch)plt.ylabel(Learning rate)plt.legend()plt.show()输出结果 根据我们设置milestones [50, 125, 160]发现学习率在这三个地方发生下降。 2.3 ExponentialLR 功能按指数衰减调整学习率 主要参数 • gamma指数的底 调整方式lr lr * gamma^epoch;这里的gamma通常设置为接近1的数值例如0.95 代码实现
flag 1
if flag:gamma 0.95scheduler_lr optim.lr_scheduler.ExponentialLR(optimizer, gammagamma)lr_list, epoch_list list(), list()for epoch in range(max_epoch):lr_list.append(scheduler_lr.get_lr())epoch_list.append(epoch)for i in range(iteration):loss torch.pow((weights - target), 2)loss.backward()optimizer.step()optimizer.zero_grad()scheduler_lr.step()plt.plot(epoch_list, lr_list, labelExponential LR Scheduler\ngamma:{}.format(gamma))plt.xlabel(Epoch)plt.ylabel(Learning rate)plt.legend()plt.show()输出结果 可以发现学习率是呈指数下降的。 2.4 CosineAnnealingLR 功能余弦周期调整学习率 主要参数 • T_max下降周期 • eta_min学习率下限 调整方式 代码实现
flag 1
if flag:t_max 50scheduler_lr optim.lr_scheduler.CosineAnnealingLR(optimizer, T_maxt_max, eta_min0.)lr_list, epoch_list list(), list()for epoch in range(max_epoch):lr_list.append(scheduler_lr.get_lr())epoch_list.append(epoch)for i in range(iteration):loss torch.pow((weights - target), 2)loss.backward()optimizer.step()optimizer.zero_grad()scheduler_lr.step()plt.plot(epoch_list, lr_list, labelCosineAnnealingLR Scheduler\nT_max:{}.format(t_max))plt.xlabel(Epoch)plt.ylabel(Learning rate)plt.legend()plt.show()输出结果
2.5 ReduceLRonPlateau 功能监控指标当指标不再变化则调整例如可以监控我们的loss或者准确率当其不发生变化的时候调整学习率。 主要参数 • modemin/max 两种模式 min模式当某一个值不下降的时候我们调整学习率通常用于监控损失 max模型当某一个值不上升的时候我们调整学习率通常用于监控精确度 • factor调整系数 • patience“耐心”接受几次不变化 • cooldown“冷却时间”停止监控一段时间 • verbose是否打印日志 • min_lr学习率下限 • eps学习率衰减最小值 代码实现
flag 1
if flag:loss_value 0.5accuray 0.9factor 0.1 # 学习率变换参数mode minpatience 10 # 能接受多少轮不变化cooldown 10 # 停止监控多少轮min_lr 1e-4 # 设置学习率下限verbose True # 打印更新日志scheduler_lr optim.lr_scheduler.ReduceLROnPlateau(optimizer, factorfactor, modemode, patiencepatience,cooldowncooldown, min_lrmin_lr, verboseverbose)for epoch in range(max_epoch):for i in range(iteration):# train(...)optimizer.step()optimizer.zero_grad()#if epoch 5:# loss_value 0.4scheduler_lr.step(loss_value) #监控的标量是否下降输出结果
2.6 LambdaLR 功能自定义调整策略 主要参数 • lr_lambdafunction or list
代码实现
flag 1
if flag:lr_init 0.1weights_1 torch.randn((6, 3, 5, 5))weights_2 torch.ones((5, 5))optimizer optim.SGD([{params: [weights_1]},{params: [weights_2]}], lrlr_init)# 设置两种不同的学习率调整方法lambda1 lambda epoch: 0.1 ** (epoch // 20) # 每到20轮的时候学习率变为原来的0.1倍lambda2 lambda epoch: 0.95 ** epoch # 将学习率进行指数下降scheduler torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda[lambda1, lambda2])lr_list, epoch_list list(), list()for epoch in range(max_epoch):for i in range(iteration):# train(...)optimizer.step()optimizer.zero_grad()scheduler.step()lr_list.append(scheduler.get_lr())epoch_list.append(epoch)print(epoch:{:5d}, lr:{}.format(epoch, scheduler.get_lr()))plt.plot(epoch_list, [i[0] for i in lr_list], labellambda 1)plt.plot(epoch_list, [i[1] for i in lr_list], labellambda 2)plt.xlabel(Epoch)plt.ylabel(Learning Rate)plt.title(LambdaLR)plt.legend()plt.show()输出结果 通过lambda方法定义了两种不同的学习率下降策略。 三、学习率调整小结
有序调整Step、MultiStep、Exponential 和 CosineAnnealing自适应调整ReduceLROnPleateau自定义调整Lambda
四、学习率初始化
1、设置较小数0.01、0.001、0.0001 2、搜索最大学习率 参考该篇《Cyclical Learning Rates for Training Neural Networks》 方法我们可以设置学习率逐渐从小变大观察精确度的一个变化下面这幅图当学习率为0.055左右的时候模型精确度最高当学习率大于0.055的时候精确度出现下降情况所以在模型训练过程中我们可以设置学习率为0.055作为我们的初始学习率。