誰是第一學習深度學習框架

我的博客即將入駐“雲棲社區”,誠邀技術同仁一同入駐。

 

「第一個深度學習框架該怎麼選」對於初學者而言一直是個頭疼的問題。本文中,來自 deepsense.ai 的研究員給出了他們在高級框架上的答案。在 Keras 與 PyTorch 的對比中,作者還給出了相同神經網絡在不同框架中性能的基準測試結果。目前在 GitHub 上,Keras 有超過 31,000 個 Stars,而晚些出現的 PyTorch 已有近 17,000 個 Stars。

值得一提的是,儘管在 4 月底 PyTorch 在 0.4 版本中已經加入了對於 Windows 的支持,但其對比 Keras 與 TensorFlow 在 Windows 上的穩定性還略有差距。

兩大框架的鏈接:

Keras:https://github.com/keras-team/keras (https://keras.io/)

PyTorch:https://github.com/pytorch/pytorch

你想學習深度學習嗎?是要將深度學習應用到業務中,還是用深度學習開展副業,抑或只是爲了得到一些適合市場需求的技能?無論目標是什麼,選擇合適的深度學習框架是達到目標的第一步。

我們強烈建議你選擇 Keras 或 PyTorch。它們都是非常強大的工具,且不管是學習還是實驗都很有樂趣。我們是從教師和學生的角度考慮的。本文作者 Piotr 在企業舉辦過 Keras 和 PyTorch 研討會,Rafał則正在學習這兩種框架。

一、簡介

Keras 和 PyTorch 是頗受數據科學家歡迎的深度學習開源框架。

Keras 是能夠在 TensorFlow、CNTK、Theano 或 MXNet 上運行的高級 API(或作爲 TensorFlow 內的 tf.contrib)。Keras 於 2015 年 3 月首次發佈,之後即因其易用性和語法簡潔性而受到支持,得到快速發展。Keras 是谷歌支持的一款框架。

PyTorch 於 2017 年 1 月對外發布,是專注於直接處理數組表達式的較低級別 API。去年它受到了大量關注,成爲學術研究和需要優化自定義表達式的深度學習應用偏好的解決方案。它是 Facebook 支持的一款框架。

在討論二者的具體細節之前,我們想先說明:對於「哪一個框架更好」這個問題我們沒有直接明瞭的答案。選擇哪一個框架最終取決於你的技術背景、需求和期望。本文旨在幫助你更好地瞭解何時應該選擇 Keras 或 PyTorch。

一句話總結:Keras 更容易學習和用標準層進行實驗,即插即用;PyTorch 提供一種較低級別的方法,對於更具備數學背景的用戶來講靈活性更強。

二、所以說爲何不用其他框架呢?

本文不討論選擇 TensorFlow 作爲首選深度學習框架的優劣勢,因爲我們認爲 TensorFlow 與 Keras(TensorFlow 的官方高級庫)和 PyTorch 相比對於新手不夠友好。儘管你可以找到一些 Theano 教程,但它已不再處於活躍開發狀態。Caffe 缺少靈活性,Torch 使用 Lua 語言(然而其重寫非常難:))。MXNet、Chainer 和 CNTK 目前應用不那麼廣泛。

三、Keras vs PyTorch:易用性和靈活性

Keras 和 PyTorch 的運行抽象層次不同。

Keras 是一個更高級別的框架,將常用的深度學習層和運算封裝進乾淨、樂高大小的構造塊,使數據科學家不用再考慮深度學習的複雜度。

PyTorch 提供一個相對較低級別的實驗環境,使用戶可以更加自由地寫自定義層、查看數值優化任務。當你可以使用 Python 的全部能量,訪問使用的所有函數的核心,則複雜架構的開發更加直接。這自然會以冗長爲代價。

下面用在 Keras 和 PyTorch 中定義的簡單卷積網絡來對二者進行對比:

1. Keras

model = Sequential()

model.add(Conv2D(32, (3, 3), activation=‘relu’, input_shape=(32, 32, 3)))

model.add(MaxPool2D())

model.add(Conv2D(16, (3, 3), activation=‘relu’))

model.add(MaxPool2D())

model.add(Flatten())

model.add(Dense(10, activation=‘softmax’))

2. PyTorch

class Net(nn.Module):

def __init__(self):

super(Net, self).__init__()

 

self.conv1 = nn.Conv2d(3, 32, 3)

self.conv2 = nn.Conv2d(32, 16, 3)

self.fc1 = nn.Linear(16 * 6 * 6, 10)

self.pool = nn.MaxPool2d(2, 2)

 

def forward(self, x):

x = self.pool(F.relu(self.conv1(x)))

x = self.pool(F.relu(self.conv2(x)))

xx = x.view(-1, 16 * 6 * 6)

x = F.log_softmax(self.fc1(x), dim=-1)

 

return x

 

model = Net()

上述代碼片段顯示了兩個框架的些微不同。至於模型訓練,它在 PyTorch 中需要大約 20 行代碼,而在 Keras 中只需要一行。GPU 加速在 Keras 中可以進行隱式地處理,而 PyTorch 需要我們指定何時在 CPU 和 GPU 間遷移數據。

如果你是新手,那麼 Keras 作爲更高級別的框架可能具備明顯優勢。Keras 確實可讀性更強,更加簡練,允許用戶跳過一些實現細節,更快地構建自己的第一個端到端深度學習模型。但是,忽略這些細節會限制用戶探索深度學習流程中每個計算模塊內在工作原理的機會。使用 PyTorch 會提供更多機會,來更深入地思考深度學習核心概念,如反向傳播以及其他訓練過程。

也就是說,Keras 雖然比 PyTorch 簡單得多,但它絕不是「玩具」,它是初學者以及經驗豐富的數據科學家使用的正經深度學習工具。

例如,在 DSTL 衛星圖像特徵檢測 Kaggle 競賽中,最優秀的 3 支隊伍的解決方案都使用了 Keras,第四名(deepsense.ai 隊伍)使用了 PyTorch 和 Keras。

你的深度學習應用所需的靈活性是否超出 Keras 能夠提供的靈活性值得考慮。根據你的需求,遵循 Rule of least power,Keras 可能是最完美的解決方案。

3. 結論

Keras:更簡練,更簡單的 API

PyTorch:更靈活,鼓勵用戶更深入地理解深度學習概念

四、Keras vs PyTorch:流行度和可獲取學習資源

框架流行度不僅代表了易用性,社區支持也很重要——教程、代碼庫和討論組。截至 2018 年 6 月,Keras 和 PyTorch 的流行度不斷增長,不管是 GitHub 還是 arXiv 論文(注意大部分提及 Keras 的論文也提到它的 TensorFlow 後端)。根據 KDnuggets 調查,Keras 和 PyTorch 是增長最快的數據科學工具。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章