Keras vs PyTorch,哪一個更適合做深度學習?

2020-12-27 機器之心Pro

選自Medium

作者:Karan Jakhar

機器之心編譯

參與:小舟、魔王

如何選擇工具對深度學習初學者是個難題。本文作者以 Keras 和 Pytorch 庫為例,提供了解決該問題的思路。

當你決定學習深度學習時,有一個問題會一直存在——學習哪種工具?

深度學習有很多框架和庫。這篇文章對兩個流行庫 Keras 和 Pytorch 進行了對比,因為二者都很容易上手,初學者能夠輕鬆掌握。

那麼到底應該選哪一個呢?本文分享了一個解決思路。

做出合適選擇的最佳方法是對每個框架的代碼樣式有一個概覽。開發任何解決方案時首先也是最重要的事就是開發工具。你必須在開始一項工程之前設置好開發工具。一旦開始,就不能一直換工具了,否則會影響你的開發效率。

作為初學者,你應該多嘗試不同的工具,找到最適合你的那一個。但是當你認真開發一個項目時,這些事應該提前計劃好。

每天都會有新的框架和工具投入市場,而最好的工具能夠在定製和抽象之間做好平衡。工具應該和你的思考方式和代碼樣式同步。因此要想找到適合自己的工具,首先你要多嘗試不同的工具。

我們同時用 Keras 和 PyTorch 訓練一個簡單的模型。如果你是深度學習初學者,對有些概念無法完全理解,不要擔心。從現在開始,專注於這兩個框架的代碼樣式,儘量去想像哪個最適合你,使用哪個工具你最舒服,也最容易適應。

這兩個工具最大的區別在於:PyTorch 默認為 eager 模式,而 Keras 基於 TensorFlow 和其他框架運行(現在主要是 TensorFlow),其默認模式為圖模式。最新版本的 TensorFlow 也提供類似 PyTorch 的 eager 模式,但是速度較慢。

如果你熟悉 NumPy,你可以將 PyTorch 視為有 GPU 支持的 NumPy。此外,現在有多個具備高級 API(如 Keras)且以 PyTorch 為後端框架的庫,如 Fastai、Lightning、Ignite 等。如果你對它們感興趣,那你選擇 PyTorch 的理由就多了一個。

在不同的框架裡有不同的模型實現方法。讓我們看一下這兩種框架裡的簡單實現。本文提供了 Google Colab 連結。打開連結,試驗代碼。這可以幫助你找到最適合自己的框架。

我不會給出太多細節,因為在此,我們的目標是看一下代碼結構,簡單熟悉一下框架的樣式。

Keras 中的模型實現

以下示例是數字識別的實現。代碼很容易理解。你需要打開 colab,試驗代碼,至少自己運行一遍。

Keras 自帶一些樣本數據集,如 MNIST 手寫數字數據集。以上代碼可以加載這些數據,數據集圖像是 NumPy 數組格式。Keras 還做了一點圖像預處理,使數據適用於模型。

以上代碼展示了模型。在 Keras(TensorFlow)上,我們首先需要定義要使用的東西,然後立刻運行。在 Keras 中,我們無法隨時隨地進行試驗,不過 PyTorch 可以。

以上的代碼用於訓練和評估模型。我們可以使用 save() 函數來保存模型,以便後續用 load_model() 函數加載模型。predict() 函數則用來獲取模型在測試數據上的輸出。

現在我們概覽了 Keras 基本模型實現過程,現在來看 PyTorch。

PyTorch 中的模型實現

研究人員大多使用 PyTorch,因為它比較靈活,代碼樣式也是試驗性的。你可以在 PyTorch 中調整任何事,並控制全部,但控制也伴隨著責任。

在 PyTorch 裡進行試驗是很容易的。因為你不需要先定義好每一件事再運行。我們能夠輕鬆測試每一步。因此,在 PyTorch 中 debug 要比在 Keras 中容易一些。

接下來,我們來看簡單的數字識別模型實現。

以上代碼導入了必需的庫,並定義了一些變量。n_epochs、momentum 等變量都是必須設置的超參數。此處不討論細節,我們的目的是理解代碼的結構。

以上代碼旨在聲明用於加載訓練所用批量數據的數據加載器。下載數據有很多種方式,不受框架限制。如果你剛開始學習深度學習,以上代碼可能看起來比較複雜。

在此,我們定義了模型。這是一種創建網絡的通用方法。我們擴展了 nn.Module,在前向傳遞中調用 forward() 函數。

PyTorch 的實現比較直接,且能夠根據需要進行修改。

以上代碼段定義了訓練和測試函數。在 Keras 中,我們需要調用 fit() 函數把這些事自動做完。但是在 PyTorch 中,我們必須手動執行這些步驟。像 Fastai 這樣的高級 API 庫會簡化它,訓練所需的代碼也更少。

最後,保存和加載模型,以進行二次訓練或預測。這部分沒有太多差別。PyTorch 模型通常有 pt 或 pth 擴展。

關於框架選擇的建議

學會一種模型並理解其概念後,再轉向另一種模型,並不是件難事,只是需要一些時間。本文作者給出的建議是兩個都學,但是不需要兩個都深入地學。

你應該從一個開始,然後在該框架中實現模型,同時也應當掌握另一個框架的知識。這有助於你閱讀別人用另一個框架寫的代碼。永遠不要被框架限制住。

先從適合自己的框架開始,然後嘗試學習另一個。如果你發現另一個用起來更合適,那麼轉換成另一個。因為 PyTorch 和 Keras 的大多數核心概念是類似的,二者之間的轉換非常容易。

Colab 連結:

PyTorch:https://colab.research.google.com/drive/1irYr0byhK6XZrImiY4nt9wX0fRp3c9mx?usp=sharing

Keras:https://colab.research.google.com/drive/1QH6VOY_uOqZ6wjxP0K8anBAXmI0AwQCm?usp=sharing

原文連結:https://medium.com/@karan_jakhar/keras-vs-pytorch-dilemma-dc434e5b5ae0

相關焦點

  • Keras vs PyTorch:誰是第一深度學習框架?
    兩大框架的連結:  Keras:https://github.com/keras-team/keras (https://keras.io/)  PyTorch:https://github.com/pytorch/pytorch  你想學習深度學習嗎?
  • 「決戰紫禁之巔」之深度學習框架篇:Keras VS PyTorch
    一年前,機器之心就曾做過此方面的探討:《Keras vs PyTorch:誰是「第一」深度學習框架?》。現在PyTorch已經升級到1.x版本,而Keras也在進一步發展,情況發生了怎樣的變化呢?本文從四個方面對Keras和PyTorch各自的優劣勢做了進一步詳述,相信讀者會對如何選擇適合自己的框架有更清楚的認知。
  • pytorch深度學習一
    pytorch最近正在學習深度學習相關的課程,近幾年深度學習可謂十分火熱,不論是在工業界還是學術界都想往深度學習上靠一靠,甚至是在隔壁的機械學院都有很多實驗室研究深度學習聲明:因為任務是學習pytorch,所以更多的還是從框架入手,以代碼為主,深度學習的基礎知識不會涉及非常多。如有需要可以去看書。今天主要內容是pytorch的介紹以及pytorch的優點特徵。
  • Keras與PyTorch及Caffe的CNN實現對比
    這些深度學習框架提供了高級編程接口,幫助我們設計深度學習模型。使用深度學習框架,它通過提供內置的庫函數來減少開發人員的工作,從而使我們能夠更快更容易地構建模型。選擇深度學習框架在選擇深度學習框架時,有一些指標可以找到最好的框架,它應該提供並行計算、良好的運行模型的接口、大量內置的包,它應該優化性能,同時也要考慮我們的業務問題和靈活性,這些是我們在選擇深度學習框架之前要考慮的基本問題。
  • 初學AI神經網絡應該選擇Keras或是Pytorch框架?
    TensorFlow框架儘管意義非凡,引起極大關注和神經網絡學習風潮,但對一般開發者用戶太不友好。軟體開發者畢竟不是科學家,很多時候簡單易學易用是程式設計師選擇的第一要素。目前,兩個主要的深度學習庫Keras和Pytorch獲得了大量關注,主要是因為它們的使用比較簡單。
  • TensorFlow、PyTorch、Keras:NLP框架哪家強
    全文共3412字,預計學習時長7分鐘在對TensorFlow、PyTorch和Keras做功能對比之前,先來了解一些它們各自的非競爭性柔性特點吧。非競爭性特點下文介紹了TensorFlow、PyTorch和Keras的幾個不同之處,便於讀者對這三個框架有初步了解。列出這些區別的重點不在於對三者做比較,而在於做一個初步介紹。
  • 深度學習-Pytorch框架及常用代碼段學習
    前言:之前一直用的是tensorflow和keras,沒有接觸過Pytorch,但是最近因為項目需求,必須要使用Pytorch,於是從娃娃抓起,從頭學習下Pytorch,做點筆記以便日後查詢。對於筆者而言,學習某個深度學習框架,最好的資料是官方所給文檔,pytorch也是如此,官方文檔連結如下:https://pytorch.org/docs/stable/index.html一、基本設置篇主要包括一些版本號查詢,基本包的導入,顯卡設置等,如有遺漏之處,煩請指出。
  • Tensorflow還是PyTorch?哪一個才更適合編程實現深度神經網絡?
    我的回答是:別擔心,你從哪一個入門,你選擇哪一個並不重要,重要的是自己動手實踐!下面我們開始吧!嗯,這其實是在簡單性和實用性之間進行一定的折衷,以便能夠做更多自定義的事情。最重要的是要學習背後的深度學習概念,您在其中一個框架中獲得的所有知識在另一個框架下照樣有用。3. 工業應用還是學術研究?但是,很明顯,神經網絡的工業應用與學術研究是截然不同的。 在這種情況下,決定選擇哪一個很重要。
  • 深度學習框架 PyTorch 為何值得學
    PyTorch 強調從研究到生產來源:https://pytorch.org根據官網介紹,PyTorch 是一個開源的深度學習平臺,提供從研究原型到生產部署的無縫路徑(An open source流行度雖然可以說明問題,但是,你一定要知道更多,才能明白 PyTorch 為什麼值得學,你在什麼情況下需要學習  PyTorch 。PyTorch 關鍵發展節點2017 年 1 月,Facebook AI 研究團隊發布 PyTorch,一個基於 Torch 的 Python 工具包,專門用於 GPU 加速的深度學習編程。
  • keras深度學習實戰培訓教程
    keras深度學習實戰培訓教程 學習基礎:熟悉python,有了深度學習理論基礎,就是缺少動手編程能力,無從下手。參加培訓後可以參加深度學習競賽,做科研工作。手把手教你掌握深度學習 1.波士頓房價回歸學習(3節課)文檔學習代碼訓練代碼解釋普通版本優化版本 2. 燕尾花分類學習(2節課)文檔學習代碼訓練代碼解釋 3.
  • 改善深度學習訓練的trick總結|CSDN博文精選
    作者 | ZesenChen來源 | CSDN博客精選在深度學習中,同樣一個模型用不同的初始化,數據處理,batch size,學習率,優化器都能得到不同性能的參數。我根據自己參與過的比賽中經常用到的一些trick進行大致的總結,有代碼的會順便附上,方便自己以後使用。
  • 使用PyTorch Lightning自動訓練深度神經網絡
    它幫助你擴展模型並編寫更少的樣板文件,同時維護代碼乾淨和靈活同時進行擴展。它幫助研究人員更多地專注於解決問題,而不是編寫工程代碼。我從兩年前就開始使用PyTorch了,我從0.3.0版本開始使用。在我使用PyTorch之前,我使用Keras作為我的深度學習框架,但後來我開始切換到PyTorch,原因有幾個。
  • 深度學習庫 Keras 2 重磅發布,與 TensorFlow 聯繫更緊密
    昨天,著名深度學習開源庫 Keras 通過官方博客正式發布了全新版本:Keras 2。更為重要的是,通過使用 Keras,更多的從前完全沒有機器學習開發經驗的用戶,從此步入了深度學習的世界。融入 TensorFlow,成為深度學習的通用語言在本次版本更新中,最重要的一項內容就是增強了 Keras 與 TensorFlow 的邏輯一致性。按照 Keras 在博客中的說法:「這是將 Keras API 整合到 TensorFlow 核心的一個重要的準備步驟」。
  • 掌握深度學習,為什麼要用 PyTorch、TensorFlow 框架?
    另一方面,在某些情況下,深度學習或深度遷移學習可以幫助你訓練更準確的模型。在這些情況下,你可以考慮使用PyTorch和TensorFlow,特別是如果你所需的訓練模型與其中一個框架模型庫中的模型類似。PyTorchPyTorch建立在舊版的Torch和Caffe2框架之上。
  • Keras PyTorch Caffe CNN實現對比
    在當今世界,人工智慧已被大多數商業運作所應用,而且由於先進的深度學習框架,它非常容易部署。這些深度學習框架提供了高級編程接口,幫助我們設計深度學習模型。使用深度學習框架,它通過提供內置的庫函數來減少開發人員的工作,從而使我們能夠更快更容易地構建模型。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    選自builtin作者:Vihar Kurama機器之心編譯參與:吳攀、杜偉谷歌的 Tensorflow 與 Facebook 的 PyTorch 一直是頗受社區歡迎的兩種深度學習框架。那麼究竟哪種框架最適宜自己手邊的深度學習項目呢?
  • 兩個提高深度學習訓練效率的絕技
    提高GPU利用率:CPU vs GPUGPU利用率低, 主要原因是CPU處理的效率跟不上GPU2.1 CPU vs GPU的通信 CPU負責加載數據+數據預處理,並不斷的在內存和顯存之間交互數據  GPU負責模型訓練(圖片來自網絡)
  • TensorFlow vs PyTorch:哪個是深度學習網絡編程的最佳框架呢?
    哪種框架最適合神經網絡編程呢?是TensorFlow還是PyTorch ?首先讓我們構建一個神經網絡模型,該模型分別使用PyTorch和Keras(TensorFlow)對手寫數字進行分類。在簡單和實用之間有一個妥協,能夠做更多的定製的東西。
  • 上線倆月,TensorFlow 2.0被吐槽太難用,網友:看看人家PyTorch
    引入 Keras 可能是個錯誤Keras 是一個封裝了 TF 等深度學習框架的代碼庫,具有很好的易用性。TensorFlow 為了解決飽受詬病的上手困難問題而引入了 Keras 的 API。但是從 TensorFlow 的定位和功能來看,和 Keras 的結合在目前來說不夠成功。
  • 讓3D深度學習更快更靈活,Facebook開源PyTorch3D
    魚羊 發自 麥蒿寺量子位 報導 | 公眾號 QbitAI現在,你的神經網絡可以更輕鬆地和 3D 數據搭配使用了。Facebook AI 已經推出了用於 3D 深度學習的開源工具包,PyTorch3D。顧名思義,PyTorch3D 是一個基於 PyTorch 的高度模塊化,且經過優化的庫。