Pytorch进阶训练技巧

当pytorch提供的内置损失函数无法实现需求时,可以通过自定义损失函数来实现目标。内置损失函数定义在torch.nn中,常用的有MSELoss(),L1Loss(),CrossEntropyLoss()等。自定义损失函数常通过类实现,像自定义神经网络一样,继承nn.Module()并且实现__init__()和forward()函数,在使用时,直接实例化类对象即可,这样实现的好处是全程用pytorch内置的数据结构进行处理,规范统一。

动态调整学习率的目的是让减少网络训练中震荡,是loss继续下降,模型收敛的更优。在pytorch中学习率被称为scheduler,一个优化器有多个参数组(param_group),每个参数组中用字典结构存储着信息,其中神经网络的参数组中,键‘lr’对应的就是学习率。定义优化器在torch.optim中,常用的优化器有Adam等,优化器需要至少一个参数,该参数即为该优化器需要优化的网络结构,例如 optimizer = torch.optim.Adam(net.parameters()),学习率的设置为 scheduler1 = torch.optim.lr_scheduler. StepLR (optimizer, ,step_size = 30),在实际训练时,需要先调用优化器optimizer.step()再调用scheduler1.step()进行学习率的改变。自定义调整学习率,定义一个函数def adjust_lr_rate(optimizer,…),通过for param_group in optimizer.param_groups: param_group[‘lr] = adjust_lr_rate(optimizer,…)来实现。

模型微调为借鉴大模型提供了一个有效的方案:通过修改模型的部分层(例如输入层),并关闭其余层的梯度计算,仅开放新加网络层的梯度计算,在沿用大模型模型参数与知识的基础上,在自己小数据集上训练新的网络层,从而高效的实现网络模型。

模型微调实现方法:

https://github.com/datawhalechina/thorough-pytorch/blob/main/%E7%AC%AC%E5%85%AD%E7%AB%A0%20PyTorch%E8%BF%9B%E9%98%B6%E8%AE%AD%E7%BB%83%E6%8A%80%E5%B7%A7/6.3%20%E6%A8%A1%E5%9E%8B%E5%BE%AE%E8%B0%83.md

所谓半精度训练是指将torch默认的float32改成float16,这样在GPU上训练时,每一个batchSize能够节约一定的空间,将其放在cuda上计算时,就能够节约显存,GPU的性能主要有两个指标,分别为算力和显存,前者决定了显卡的计算速度,后者决定了同时可以放入多少数据用于计算,在显存数量一定的情况下,每次训练能够加载的数据越多(batchSize越大),则训练效率会越高,另外,当数据本身较大时,如3D图像或者视频时,显存甚至连BatchSize=1时都无法实现,则使用半精度训练意义更大。

半精度训练实现方法:

https://github.com/datawhalechina/thorough-pytorch/blob/main/%E7%AC%AC%E5%85%AD%E7%AB%A0%20PyTorch%E8%BF%9B%E9%98%B6%E8%AE%AD%E7%BB%83%E6%8A%80%E5%B7%A7/6.4%20%E5%8D%8A%E7%B2%BE%E5%BA%A6%E8%AE%AD%E7%BB%83.md

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值