pytorch实现查看当前学习率
在pytorch训练过程中可以通过下面这一句代码来打印当前学习率
print(net.optimizer.state_dict()['param_groups'][0]['lr'])
补充知识:Pytorch:代码实现不同层设置不同的学习率,选择性学习某些层参数
1,如何动态调整学习率
在使用pytorch进行模型训练时,经常需要随着训练的进行逐渐降低学习率,在pytorch中给出了非常方面的方法:
假设我们定义了一个优化器:
importtorch importtorch.nnasnn optimizer=torch.optim(model.parameters(),lr=0.01,momentum=0.9)
该优化器的初始化学习为0.01,
如果我们学习每个"n"个epoch把学习率降低为原来的0.9倍,则需要声明一个学习率调节器:
torch.optim.lr_scheduler.StepLR(optimizer,step_size,gamma=0.1,last_epoch=-1)
其中:
optimizer:前面声明的优化器;
step_size:每step_size个epoch学习率降低为原来的gamma倍,
last_epoch:当前所处的epoch
例如:
#Assumingoptimizeruseslr=0.05forallgroups #lr=0.05ifepoch<30 #lr=0.005if30<=epoch<60 #lr=0.0005if60<=epoch<90 #... scheduler=StepLR(optimizer,step_size=30,gamma=0.1) forepochinrange(100): scheduler.step() train(...) validate(...)
另外其他常用的更新策略类似:
torch.optim.lr_scheduler.ExponentialLR(optimizer,gamma,last_epoch=-1)
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer,T_max,eta_min=0,last_epoch=-1)
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)
torch.optim.lr_scheduler.LambdaLR(optimizer,lr_lambda,last_epoch=-1)
2,如何选择性学习某些参数
对于我们现有的模型model,通过调整参数的requires_grad属性控制该模型是否参与求导运算
forname,paraminmodel.named_parameters(): ifparam.requires_grad: print("requires_grad:True",name) else: print("requires_grad:False",name)
如果模型中包含多个子模块,可用通过
sub_block=model.children()
获取该模块,然后通过迭代索引的方式获取参数:
forname,paraminsub_block.named_parameters()
以上这篇pytorch实现查看当前学习率就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。