深度學(xué)習(xí)是機(jī)器學(xué)習(xí)中一種基于對(duì)數(shù)據(jù)進(jìn)行表征學(xué)習(xí)的方法,作為當(dāng)下最熱門的話題,谷歌、Facebook、微軟等巨頭紛紛圍繞深度學(xué)習(xí)做了一系列研究,一直在支持開源深度學(xué)習(xí)框架的建設(shè)。
過去一年間,在這些巨頭的加持下,深度學(xué)習(xí)框架格局發(fā)生了極大改變:新框架橫空出世,舊的框架也逐漸退出歷史舞臺(tái),而框架與框架之間的聯(lián)系也更加緊密,生態(tài)更為開放。這一年,小編也在時(shí)刻關(guān)注著這些發(fā)展和變化,下面這些話題,每一個(gè)都引起了開發(fā)者此起彼伏的討論:
Facebook 開源 PyTorch,成為 TensorFlow 強(qiáng)敵
Theano 完成歷史使命,功成身退
ONNX 開放平臺(tái)橫空出世,力圖促進(jìn)開放的開發(fā)生態(tài)
CNTK,Keras,MXNet 均迎來重大更新
微軟攜手亞馬遜推出 Gluon 深度學(xué)習(xí)庫(kù),英特爾推出增強(qiáng)學(xué)習(xí)框架 Coach
針對(duì)移動(dòng)終端,Caffe2 和 TensorFlow Lite 先后開源
接下來,小編會(huì)盤點(diǎn)上述機(jī)器學(xué)習(xí)框架之間的重大發(fā)展和改變,以饗讀者。
Facebook 開源 PyTorch,以風(fēng)起云涌之勢(shì)占領(lǐng)開發(fā)者社區(qū)
2017 年初,F(xiàn)acebook 在機(jī)器學(xué)習(xí)和科學(xué)計(jì)算工具 Torch 的基礎(chǔ)上,針對(duì) Python 語言發(fā)布了全新的機(jī)器學(xué)習(xí)工具包——PyTorch。PyTorch 實(shí)際上是 NumPy 的替代,它支持 GPU,有著更高級(jí)的功能,可以用來構(gòu)建和訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)。一經(jīng)發(fā)布,它便受到廣泛關(guān)注和討論。經(jīng)過將近一年的發(fā)展,目前 PyTorch 已經(jīng)成為從業(yè)者最重要的研發(fā)工具之一。
年初發(fā)布 PyTorch 時(shí),F(xiàn)acebook 曾表示,「它有望輔助、或在一定程度上替代現(xiàn)有的 Python 數(shù)學(xué)庫(kù)(比如 NumPy)。」目前來看,PyTorch 的使用越來越廣泛,這一預(yù)言成為現(xiàn)實(shí)。
在眾多開發(fā)者眼中,PyTorch 是 TensorFlow 之外一個(gè)非常好的選擇。
以下為 PyTorch 主要優(yōu)勢(shì):
它處于機(jī)器學(xué)習(xí)第一大語言 Python 的生態(tài)圈之中,使得開發(fā)者能接入廣大的 Python 庫(kù)和軟件。因此,Python 開發(fā)者能夠用他們熟悉的風(fēng)格寫代碼,而不需要針對(duì)外部 C 語言或 C++ 庫(kù)的 wrapper,使用它的專門語言。
不需要從頭重新構(gòu)建整個(gè)網(wǎng)絡(luò),它為改進(jìn)現(xiàn)有的神經(jīng)網(wǎng)絡(luò)提供了更快速的方法——采用動(dòng)態(tài)計(jì)算圖(dynamic computational graph)結(jié)構(gòu),而不是大多數(shù)開源框架,比如 TensorFlow、Caffe、CNTK、Theano 等采用的靜態(tài)計(jì)算圖。
PyTorch 中用于數(shù)據(jù)加載的 API 設(shè)計(jì)得很好。接口在數(shù)據(jù)集、采樣器和數(shù)據(jù)加載器中有明確規(guī)定。數(shù)據(jù)加載器接收數(shù)據(jù)集和采樣器,根據(jù)采樣器的調(diào)度,在數(shù)據(jù)集上生成迭代器。加載并行數(shù)據(jù)就像把 num_workers 語句傳遞到數(shù)據(jù)加載器一樣簡(jiǎn)單。
采用了定制的 GPU 內(nèi)存分配器。這使得開發(fā)者的深度學(xué)習(xí)模型能夠有「最大限度的內(nèi)存效能」,訓(xùn)練比從前更大的深度神經(jīng)網(wǎng)絡(luò)。
GitHub 地址:https://github.com/pytorch/pytorch
#pTensorFlow引入動(dòng)態(tài)圖機(jī)制#e#
TensorFlow 遇強(qiáng)敵,引入動(dòng)態(tài)圖機(jī)制等多個(gè)更新
TensorFlow 是 Google 于 2015 年底推出的深度學(xué)習(xí)框架。過去兩年間,它在開發(fā)者社區(qū)享有盛譽(yù),目前已成為最為常用的深度學(xué)習(xí)框架。它的功能全,社區(qū)好,因此使用率也一直穩(wěn)定保持領(lǐng)先。而隨著 PyTorch 等框架的橫空出世,因?yàn)槲臋n和接口混亂,使用繁瑣等缺點(diǎn),TensorFlow 廣受詬病。
在 2017 年,開發(fā)團(tuán)隊(duì)不斷為 TensorFlow 引入新的功能:年初發(fā)布 TensorFlow 1.0,實(shí)現(xiàn)對(duì) Keras 的全面支持;年底引入 Eager Execution 動(dòng)態(tài)圖機(jī)制,讓開發(fā)變得更加簡(jiǎn)單和直觀。
以下為 TensorFlow 被大家廣為稱贊的優(yōu)點(diǎn):
TensorFlow 的 Saver 對(duì)象很容易使用,并為檢查點(diǎn)(check-pointing)提供了更多選擇。
在序列化中,TensorFlow 的主要優(yōu)點(diǎn)是可以將整個(gè)圖保存為協(xié)議緩沖區(qū)。這包括參數(shù)和運(yùn)算。此外,該圖可以通過其他支持的語言 (C++,Java) 加載。這對(duì)不支持 Python 的調(diào)度棧來說至關(guān)重要。理論上,在改變模型源代碼之后,你想要運(yùn)行舊模型時(shí)它也能有所幫助。
支持移動(dòng)和嵌入式部署,雖然將 TensorFlow 部署到 Android 或 iOS 上需要大量的工作,但不必用 Java 或 C++重寫模型的整個(gè)推理程序。
此外,TensorFlow Serving 支持高性能的服務(wù)器端部署,可以支持用戶輕松地?fù)Q用模型而不會(huì)降低服務(wù)性能。
另外,它在年底引入 Eager Execution——一種命令式、由運(yùn)行定義的接口,一旦從 Python 被調(diào)用可立即執(zhí)行操作,這使得 TensorFlow 的入門學(xué)習(xí)變得更簡(jiǎn)單,也使得研發(fā)工作變得更直觀。
GitHub 地址:https://github.com/tensorflow/tensorflow
評(píng)論
查看更多