PyTorch 是一种非常灵活的深度进修框架,它允许通过静态神经网络(例如利用静态控流——如 if 语句或 while 循环的网络)进行自动微分。它还支持 GPU 加速、分布式训练以及各类优化任务,同时还拥有许多更简洁的特色。今年 3 月初,官方团队发布了 PyTorch 1.8 版本,整合了自去年 10 月 1.7 版本发布以来的 3000 多次 commit,并供应了编译、代码优化、科学计算前端 API 方面的更新和新特色。值得一提的是,该版本还新增了对 AMD ROCm 的支持。长期以来,为了充分挖掘 PyTorch 的特色,研究人员也提出了各种各样的小技术,比如如何加快深度进修模型训练的运用、训练完模型以后如何保存模型、如何运用多卡训练以及如何在训练过程中让进修率进行衰减等。这些小技术或多或少都可以提高 PyTorch 的运用效率。近日,reddit 出现了一个关于 PyTorch 运用技术的帖子:「PyTorch 的七个实用技术」,还供应了相关示例,引发网友热议。
7 个技术提高 PyTorch 妙技发帖人归纳了 7 个有助于提高 PyTorch 运用妙技的技术。这些技术都是发帖人常常出错或者健忘的内容归纳。此外,发帖人还在 Colab 上展示了一些应用示例和视频讲解。
1、在目标设备上运用 device 参数直接创办 tensors;
2、运用 Sequential 层获得更干净的代码;
3、不要列出层 list,因为不会被 nn.Module 类正确注册。相反,应该将 list 作为未打包的参数传递到 Sequential 层中;
4、PyTorch 为 distributions 供应了一些很棒的对象和函数,但它们在 torch.distribution 中没有得到充分利用;
5、当在两个 epoch 之间存储张量指标时,确保挪用. detach() 以避免内存泄漏;
6、运用 torch.cuda.empty_cache() 清除 GPU 缓存,如果你想在运用 notebook 时简略并重新创办一个大模型,这很有效;
7、在开始尝试之前,不要忘了挪用 model.eval()。
以下两个示例分别为技术 6 和技术 7 的代码示例:
技术 6:从 GPU 简略模型示例。
技术 7:在尝试之前,挪用 eval()。网友评估上述 7 个 PyTorch 运用技术,网友也给出了自己的评估。一位用户评论道:「即使我用 PyTorch 工作了多年,现在我仍然健忘挪用 eval(),我发誓。」
还有效户表示:「为什么不运用 nn.Sequential?出于研究目的,我常常需要检查特定层的情况,例如,检查权重、梯度、激活,甚至有条件地执行一些代码。在 nn.ModuleList 中执行这些操作非常直观,因为只需将所有层都像数组的元素一样对待,然后运用 split 分割数组索引 [i:j],这样会更好。」
还有效户表示:「谢谢分享,这些看起来非常有效。我通过复现工作中常常运用的常见模型来深入了解 PyTorch,例如逻辑回归、决策树等。(但我们现在还没有运用 DL 的示例。)你们了解 PyTorch 中关于 ML 的一些好的资源吗,比如,你可以在 sklearn 中做的事情?」
最后,虽然发帖人强调了这 7 个技术是 ta 自己常常犯错或者健忘的内容。不过,这些技术或许依然适用于你。Colab 示例地址:https://colab.research.google.com/drive/15vGzXs_ueoKL0jYpC4gr9BCTfWt935DC?usp=sharing参考链接:https://www.reddit.com/user/SlickBlueML/