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

2021-09-20 09:04:09 字數 3500 閱讀 3541

我的部落格即將入駐「雲棲社群」,誠邀技術同仁一同入駐。

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

值得一提的是,儘管在 4 月底 pytorch 在 0.4 版本中已經加入了對於 windows 的支援,但其對比 keras 與 tensorflow 在 windows 上的穩定性還略有差距。

keras: (

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 是增長最快的資料科學工具。

深度學習框架 PyTorch(一)

pytorch是基於python的開源深度學習框架,它包括了支援gpus計算的tensor模組以及自動求導等先進的模組,被廣泛應用於科學研究中,是最流行的動態圖框架。pytorch的運算單元叫作張量tensor。我們可以將張量理解為乙個多維陣列,一階張量即為一位陣列,通常叫作向量vector 二階張...

深度學習框架

近一年來,深度學習的風起雲湧,產生了許多令人興奮的成果,同時,深度學習框架也是百家爭鳴。經過這一年的觀察,tensorflow 似乎成為了一種潮流,並且越來越多的框架開始為 keras 提供支援,它可能會成為一種標準。今後選擇keras框架作為深度學習的目標。keras 被認為是構建神經網路的未來,...

深度學習框架PaddlePdddle學習 一)

官網文件使用的作業系統是ubunt14.04,我使用的是vmware workstation 12 player安裝的ubuntu虛擬機器,它與redhat有一些不同,但配置比較麻煩,dns配置及解析參考了一些資料。其實也可以使用redhat安裝,但其依賴包的安裝非常麻煩,而且還需要把deb轉化成r...