7個實用小技巧,提升PyTorch技能,還帶示例演示
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