Pytorch如何定义学习率衰减

@[TOC]pytorch如何定义学习率衰减

优化器的种类

简单的优化器

优化器的原理其实都是梯度下降,简单的梯度下降法中有标准梯度下降(GD)批量梯度下降(BGD)随机梯度下降(SGD)。这三种都是比较简单的梯度下降方法,听名字就可以知道啦,标准梯度下降是每一个样本算一次梯度、批量梯度下降是每一批算一下平均梯度、随机梯度下降是每一批中随机选取一个梯度。这三种都是需要自己去定义学习率的。

其中用的较多的是随机梯度下降(SGD)pytorch中用法是,optim.SGD

动量优化的方法

使用动量的SGD,NAG(牛顿加速度法)
这两种方法需要改变的一个学习率,是一个矫正因子alpha,alpha越大表示冲量大,下降的动能较大,也容易盲目下降

自适应学习率的优化算法AdaGrad算法、RMSProp算法等
AdaDelta算法
还有结合了AdaDelta和冲量结合的算法Adam(最最最常用)

Pytorch中的类

所有的优化器都继承自这个Optimizer类
有Adadelta类
在这里插入图片描述
Adagrad类
在这里插入图片描述
还有最常见的Adam类
在这里插入图片描述
其中也有weight_decay这个参数可以调节学习率,但是具体是怎么调节不是很清楚,所以用学习率下降的时候,我通常喜欢再用一个pytorch里提供的调节学习率的方法。

学习率调整策略

在这里插入图片描述
我觉得一般用这一种就好了
在这里插入图片描述
torch.optim.lr_scheduler.StepLR(optimizer,gamma=0.8)
只用optimizergamma这两个参数就好了。

Step_LR = torch.optim.lr_scheduler.StepLR(optimizer,gamma=0.8)
for epoch in range(100):
	train()
	validate()
	Step_LR.step()

这是每一个epoch用改变学习率
不想每一个都改

Step_LR = torch.optim.lr_scheduler.StepLR(optimizer,gamma=0.8)
for epoch in range(100):
	train()
	validate()
	if epoch%10==0:
		Step_LR.step()

这样就可以想几个epoch变一次就怎样变

附上一个怎么查看自己的学习率有没有变

print(net.optimizer.state_dict()['param_groups'][0]['lr'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值