Pytorch训练技巧汇总

微信扫一扫,分享到朋友圈

Pytorch训练技巧汇总

pytorch的训练过程有一些固定的模式和技巧,当没有遵守时会出现一些奇怪的问题,本文对工业实践中容易犯的错误进行汇总。

问题一:Pytorch 训练迭代几个batch后梯度没有下降

在每个batch的训练过程中,都必须完成下面的梯度更新步骤:
1、通过网络结构计算logit和loss
2、对loss计算所有输入变量的梯度
3、使用optimizer更新变量的梯度
4、更新scheduler的参数
5、梯度重置为0

如果缺少任意步骤,梯度不会更新,并且损失也不会下降; 具体代码如下:

loss = loss_calc(output, trg)
loss.backward()
torch.nn.utils.clip_grad_norm_(model.parameters(), args.max_grad_norm)
optimizer.step()
scheduler.step()
model.zero_grad()

问题二: 训练中随着step增加,内存占用也持续增加

通常,在训练过程中,我们都是将 loss 的添加到一个 list 里保存。记住在保存前,先 detach,然后仅使用其数值。否则, 你添加的就不仅仅是 loss,而是整个计算图

正确用法:

loss = F.mse_loss(prd, true)
epoch_loss += loss.detach().item()
training_log.append(epoch_loss)

错误用法:

loss = F.mse_loss(prd, true)
epoch_loss += loss
training_log.append(epoch_loss)

问题三:有没有训练和评估过程的高层封装模块

Lightning automates 40+ parts of DL/ML research

  • GPU training
  • Distributed GPU (cluster) training
  • TPU training
  • EarlyStopping
  • Logging/Visualizing
  • Checkpointing
  • Experiment management
  • Full list here

微信扫一扫,分享到朋友圈

Pytorch训练技巧汇总

做好分库分表其实很难之一

上一篇

定制Powerline的显示内容

下一篇

你也可能喜欢

Pytorch训练技巧汇总

长按储存图像,分享给朋友