Pytorch退火学习率和num_wrokers

在训练deeplabv3+的语义分割网络过程中遇到了加速训练以及退火学习率的应用,在本文中对相关知识进行记录,防止后面会有忘记。

1、退火学习率

在训练神经网络时,一般情况下学习率都会随着训练而变化,这主要是由于,在神经网络训练的后期,如果学习率过高,会造成loss的振荡,但是如果学习率减小的过快,又会造成收敛变慢的情况。因此,如何调整学习率也是一个值得讨论的问题。目前,比较常见的学习率退火方式有如下三种:

随步数衰减
比较常见的随步数衰减方式是每经过5个epoch学习率减小为一半,或者每经过20个epoch学习率减小为原来的十分之一。或者还有一种常见的经验做法,当发现验证集的loss停止下降的趋势时,将学习率固定的缩小一定的比例,如一半。

在实际应用中,随步数衰减的方法应用最为广泛。

指数衰减
指数衰减可以用如下的数学公式表示, α=α0e−kt,其中,t表示迭代次数,而α0,k是超参数

1/t衰减
1/t衰减可以用如下的数学公式表示,α=α0/(1+kt)
与指数衰减的公式定义一致,t表示迭代次数,而α0,k是超参数

事实上,如果计算资源足够多,或者对训练的时间没有要求,可以把学习率设为一个较小的数值,这样总能在缓慢的训练中,最终达到收敛。
可以参考 Pytorch中的学习率衰减及其用法

2、num_workers

Question
在给Dataloader设置worker数量(num_worker)时,到底设置多少合适?这个worker到底怎么工作的?
如果将num_worker设为0(也是默认值),就没有worker了吗?

worker的使用场景:

from torch.utils.data import DataLoader
 
train_loader = DataLoader(dataset=train_data, batch_size=train_bs, shuffle=True, num_worker=4)
 
valid_loader = DataLoader(dataset=valid_data, batch_size=valid_bs, num_worker=4)

Answer
每每轮到dataloader加载数据时:

for epoch in range(start_epoch, end_epoch):
    for i, data in enumerate(trainloader):

dataloader一次性创建num_worker个worker,(也可以说dataloader一次性创建num_worker个工作进程,worker也是普通的工作进程),

并用batch_sampler将指定batch分配给指定worker,worker将它负责的batch加载进RAM。

然后,dataloader从RAM中找本轮迭代要用的batch,如果找到了,就使用。如果没找到,就要num_worker个worker继续加载batch到内存,直到dataloader在RAM中找到目标batch。一般情况下都是能找到的,因为batch_sampler指定batch时当然优先指定本轮要用的batch。

num_worker设置得大,好处是寻batch速度快,因为下一轮迭代的batch很可能在上一轮/上上一轮…迭代时已经加载好了。坏处是内存开销大,也加重了CPU负担(worker加载数据到RAM的进程是CPU复制的嘛)。num_workers的经验设置值是自己电脑/服务器的CPU核心数,如果CPU很强、RAM也很充足,就可以设置得更大些。

如果num_worker设为0,意味着每一轮迭代时,dataloader不再有自主加载数据到RAM这一步骤(因为没有worker了),而是在RAM中找batch,找不到时再加载相应的batch。缺点当然是速度更慢。

num_workers的设置可以通过相关监控手段查看GPU利用率,如果GPU利用率的抖动较为剧烈,则说明出现了GPU等待数据的现象,此时需要设置较大的num_workers数值;如果GPU出现利用率一直平稳的处于较低水平,则可以考虑调大batch_size;注意在调大batch_size的同时需要考虑学习率的调整

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值