這是一篇總結(jié)文,給大家來捋清楚12大深度學(xué)習(xí)開源框架的快速入門,這是有三AI的GitHub項(xiàng)目,歡迎大家star/fork。
https://github.com/longpeng2008/yousan.ai
1
概述
開源框架總覽
現(xiàn)如今開源生態(tài)非常完善,深度學(xué)習(xí)相關(guān)的開源框架眾多,光是為人熟知的就有caffe,tensorflow,pytorch/caffe2,keras,mxnet,paddldpaddle,theano,cntk,deeplearning4j,matconvnet等。
如何選擇最適合你的開源框架是一個(gè)問題。有三AI在前段時(shí)間里,給大家整理了12個(gè)深度學(xué)習(xí)開源框架快速入門的教程和代碼,供初學(xué)者進(jìn)行挑選,一個(gè)合格的深度學(xué)習(xí)算法工程師怎么著得熟悉其中的3個(gè)以上吧。
下面是各大開源框架的一個(gè)總覽。
在這里我們還有一些框架沒有放上來,是因?yàn)樗鼈円呀?jīng)升級(jí)為大家更喜歡或者使用起來更加簡(jiǎn)單的版本,比如從torch->pytorch,從theano到lasagne。另外這些框架都支持CUDA,因此編程語言這里也沒有寫上cuda。
在選擇開源框架時(shí),要考慮很多原因,比如開源生態(tài)的完善性,比如自己項(xiàng)目的需求,比如自己熟悉的語言。當(dāng)然,現(xiàn)在已經(jīng)有很多開源框架之間進(jìn)行互轉(zhuǎn)的開源工具如MMDNN等,也降低了大家遷移框架的學(xué)習(xí)成本。
除此之外還有tiny-dnn,ConvNetJS,MarVin,Neon等等小眾,以及CoreML等移動(dòng)端框架,就不再一一介紹。
總的來說對(duì)于選擇什么樣的框架,有三可以給出一些建議。
(1) 不管怎么說,tensorflow/pytorch你都必須會(huì),這是目前開發(fā)者最喜歡,開源項(xiàng)目最豐富的兩個(gè)框架。
(2) 如果你要進(jìn)行移動(dòng)端算法的開發(fā),那么Caffe是不能不會(huì)的。
(3) 如果你非常熟悉Matlab,matconvnet你不應(yīng)該錯(cuò)過。
(4) 如果你追求高效輕量,那么darknet和mxnet你不能不熟悉。
(5) 如果你很懶,想寫最少的代碼完成任務(wù),那么用keras吧。
(6) 如果你是java程序員,那么掌握deeplearning4j沒錯(cuò)的。
其他的框架,也自有它的特點(diǎn),大家可以自己多去用用。
如何學(xué)習(xí)開源框架
要掌握好一個(gè)開源框架,通常需要做到以下幾點(diǎn):
(1) 熟練掌握不同任務(wù)數(shù)據(jù)的準(zhǔn)備和使用。
(2) 熟練掌握模型的定義。
(3) 熟練掌握訓(xùn)練過程和結(jié)果的可視化。
(4) 熟練掌握訓(xùn)練方法和測(cè)試方法。
一個(gè)框架,官方都會(huì)開放有若干的案例,最常見的案例就是以MNISI數(shù)據(jù)接口+預(yù)訓(xùn)練模型的形式,供大家快速獲得結(jié)果,但是這明顯還不夠,學(xué)習(xí)不應(yīng)該停留在跑通官方的demo上,而是要解決實(shí)際的問題。
我們要學(xué)會(huì)從自定義數(shù)據(jù)讀取接口,自定義網(wǎng)絡(luò)的搭建,模型的訓(xùn)練,模型的可視化,模型的測(cè)試與部署等全方位進(jìn)行掌握。
因此,我們開設(shè)了一個(gè)《2小時(shí)快速入門開源框架系列》,以一個(gè)圖像分類任務(wù)為基準(zhǔn),帶領(lǐng)大家一步一步入門,后續(xù)會(huì)增加分割,檢測(cè)等任務(wù)。
這是一個(gè)二分類任務(wù),給大家準(zhǔn)備了500張微笑表情的圖片、500張無表情的圖片,放置在git工程的data目錄下,圖片預(yù)覽如下,已經(jīng)全部縮放到60*60的大小:
這是無表情的圖片:
這是微笑表情的圖片。
因此,我們的目標(biāo)就是利用這500張圖片完成好這個(gè)圖像分類任務(wù)。
在下面的所有框架的學(xué)習(xí)過程中,我們都要完成下面這個(gè)流程,只有這樣,才能叫做真正的完成了一個(gè)訓(xùn)練任務(wù)。
另外,所有的框架都使用同樣的一個(gè)模型,這是一個(gè)3層卷積+2層全連接的網(wǎng)絡(luò),由卷積+BN層+激活層組成,有的使用帶步長(zhǎng)的卷積,有的使用池化,差別不大。
輸入圖像,48*48*3的RGB彩色圖。
第一層卷積,通道數(shù)12,卷積核3*3。
第二層卷積,通道數(shù)24,卷積核3*3。
第三層卷積,通道數(shù)48,卷積核3*3。
第一層全連接,通道數(shù)128。
第二層全連接,通道數(shù)2,即類別數(shù)。
網(wǎng)絡(luò)結(jié)構(gòu)如下:
這是最簡(jiǎn)單的一種網(wǎng)絡(luò)結(jié)構(gòu),優(yōu)化的時(shí)候根據(jù)不同的框架,采用了略有不同的方案。因?yàn)榇颂幍哪繕?biāo)不是為了比較各個(gè)框架的性能,所以沒有刻意保持完全一致。
2
開源框架
下面我們開始對(duì)各個(gè)框架進(jìn)行簡(jiǎn)述。
1 Caffe
github地址:https://github.com/BVLC/caffe。
1、概述:
Caffe是伯克利的賈揚(yáng)清主導(dǎo)開發(fā),以C++/CUDA代碼為主,最早的深度學(xué)習(xí)框架之一,比TensorFlow、Mxnet、Pytorch等都更早,需要進(jìn)行編譯安裝。支持命令行、Python和Matlab接口,單機(jī)多卡、多機(jī)多卡等都可以很方便的使用。目前master分支已經(jīng)停止更新,intel分支等還在維護(hù),caffe框架已經(jīng)非常穩(wěn)定。
2、caffe的使用通常是下面的流程:
以上的流程相互之間是解耦合的,所以caffe的使用非常優(yōu)雅簡(jiǎn)單。
3、caffe有很明顯的優(yōu)點(diǎn)和缺點(diǎn)。
優(yōu)點(diǎn):
以C++/CUDA/python代碼為主,速度快,性能高。
工廠設(shè)計(jì)模式,代碼結(jié)構(gòu)清晰,可讀性和拓展性強(qiáng)。
支持命令行、Python和Matlab接口,使用方便。
CPU和GPU之間切換方便,多GPU訓(xùn)練方便。
工具豐富,社區(qū)活躍。
缺點(diǎn):
源代碼修改門檻較高,需要實(shí)現(xiàn)前向反向傳播,以及CUDA代碼。
不支持自動(dòng)求導(dǎo)。
不支持模型級(jí)并行,只支持?jǐn)?shù)據(jù)級(jí)并行
不適合于非圖像任務(wù)。
鑒于caffe的學(xué)習(xí)有一定門檻,我給新手們提供一個(gè)自己錄制的視頻。
有三AI-caffe教程
其他框架后續(xù)也會(huì)錄制,完整的系列視頻在網(wǎng)易云上,見《有三說深度學(xué)習(xí)》,鏈接為:
https://study.163.com/course/courseMain.htm?courseId=1006238015&share=2&shareId=400000000640089
同時(shí)可以看下面的快速入門文檔,以及閱讀相關(guān)的源代碼。
caffe資料
2 Tensorflow
github地址:https://github.com/tensorflow/tensorflow。
1、概述
TensorFlow是Google brain推出的開源機(jī)器學(xué)習(xí)庫(kù),可用作各類深度學(xué)習(xí)相關(guān)的任務(wù)。
TensorFlow = Tensor + Flow,Tensor就是張量,代表N維數(shù)組,這與Caffe中的blob是類似的;Flow即流,代表基于數(shù)據(jù)流圖的計(jì)算。
2、特點(diǎn)
TensorFlow最大的特點(diǎn)是計(jì)算圖,即先定義好圖,然后進(jìn)行運(yùn)算,所以所有的TensorFlow代碼,都包含兩部分:
(1) 創(chuàng)建計(jì)算圖,表示計(jì)算的數(shù)據(jù)流。它做了什么呢?實(shí)際上就是定義好了一些操作,你可以將它看做是Caffe中的prototxt的定義過程。
(2)運(yùn)行會(huì)話,執(zhí)行圖中的運(yùn)算,可以看作是Caffe中的訓(xùn)練過程。只是TensorFlow的會(huì)話比Caffe靈活很多,由于是Python 接口,取中間結(jié)果分析,Debug等方便很多。
目前tensorflow已經(jīng)更新到2.0,由于精力原因,筆者的代碼仍然以1.x版本為例。
tensorflow資料
3 Pytorch
github地址:https://github.com/pytorch/pytorch。
1、概述:一句話總結(jié)Pytorch = Python + Torch。
Torch是紐約大學(xué)的一個(gè)機(jī)器學(xué)習(xí)開源框架,幾年前在學(xué)術(shù)界非常流行,包括Lecun等大佬都在使用。但是由于使用的是一種絕大部分人絕對(duì)沒有聽過的Lua語言,導(dǎo)致很多人都被嚇退。后來隨著Python的生態(tài)越來越完善,F(xiàn)acebook人工智能研究院推出了Pytorch并開源。Pytorch不是簡(jiǎn)單的封裝Torch 并提供Python接口,而是對(duì)Tensor以上的所有代碼進(jìn)行了重構(gòu),同TensorFlow一樣,增加了自動(dòng)求導(dǎo)。
后來Caffe2全部并入Pytorch,如今已經(jīng)成為了非常流行的框架。很多最新的研究如風(fēng)格化、GAN等大多數(shù)采用Pytorch源碼。
2、特點(diǎn)
(1) 動(dòng)態(tài)圖計(jì)算。TensorFlow從靜態(tài)圖發(fā)展到了動(dòng)態(tài)圖機(jī)制Eager Execution,pytorch則一開始就是動(dòng)態(tài)圖機(jī)制。動(dòng)態(tài)圖機(jī)制的好處就是隨時(shí)隨地修改,隨處debug,沒有類似編譯的過程。
(2) 簡(jiǎn)單。相比TensorFlow1.0中Tensor、Variable、Session等概念充斥,數(shù)據(jù)讀取接口頻繁更新,tf.nn、tf.layers、tf.contrib各自重復(fù),Pytorch則是從Tensor到Variable再到nn.Module,最新的Pytorch已經(jīng)將Tensor和Variable合并,這分別就是從數(shù)據(jù)張量到網(wǎng)絡(luò)的抽象層次的遞進(jìn)。有人調(diào)侃TensorFlow的設(shè)計(jì)是“make it complicated”,那么 Pytorch的設(shè)計(jì)就是“keep it simple”。
pytorch資料
4 Mxnet
github地址:https://github.com/apache/incubator-mxnet。
1、概述
Mxnet是由李沐等人領(lǐng)導(dǎo)開發(fā)的非常靈活,擴(kuò)展性很強(qiáng)的框架,被Amazon定為官方框架。
2、特點(diǎn)
Mxnet同時(shí)擁有命令式編程和符號(hào)式編程的特點(diǎn)。在命令式編程上MXNet提供張量運(yùn)算,進(jìn)行模型的迭代訓(xùn)練和更新中的控制邏輯;在聲明式編程中MXNet支持符號(hào)表達(dá)式,用來描述神經(jīng)網(wǎng)絡(luò),并利用系統(tǒng)提供的自動(dòng)求導(dǎo)來訓(xùn)練模型。Mxnet性能非常高,推薦資源不夠的同學(xué)使用。
MxNet資料
5 Keras
github網(wǎng)址:https://github.com/keras-team/keras。
1、概述
Keras是一個(gè)對(duì)小白用戶非常友好而簡(jiǎn)單的深度學(xué)習(xí)框架,嚴(yán)格來說并不是一個(gè)開源框架,而是一個(gè)高度模塊化的神經(jīng)網(wǎng)絡(luò)庫(kù)。
Keras在高層可以調(diào)用TensorFlow,CNTK,Theano,還有更多的庫(kù)也在被陸續(xù)支持中。 Keras的特點(diǎn)是能夠快速實(shí)現(xiàn)模型的搭建,是高效地進(jìn)行科學(xué)研究的關(guān)鍵。
2、特點(diǎn)
(1) 高度模塊化,搭建網(wǎng)絡(luò)非常簡(jiǎn)潔。
(2) API很簡(jiǎn)單,具有統(tǒng)一的風(fēng)格。
(3) 容易擴(kuò)展,只需使用python添加新類和函數(shù)。
keras資料
6 Paddlepaddle
github網(wǎng)址:https://github.com/PaddlePaddle/Paddle。
1、概述
正所謂Google有Tensorflow,F(xiàn)acebook有Pytorch,Amazon有Mxnet,作為國(guó)內(nèi)機(jī)器學(xué)習(xí)的先驅(qū),百度也有PaddlePaddle,其中Paddle即Parallel Distributed Deep Learning(并行分布式深度學(xué)習(xí))。
2、特點(diǎn)
paddlepaddle的性能也很不錯(cuò),整體使用起來與tensorflow非常類似,擁有中文幫助文檔,在百度內(nèi)部也被用于推薦等任務(wù)。另外,配套了一個(gè)可視化框架visualdl,與tensorboard也有異曲同工之妙。國(guó)產(chǎn)框架不多,大家多支持啊!
paddlepaddle資料
7 CNTK
github地址:https://github.com/Microsoft/CNTK。
1、概述
CNTK是微軟開源的深度學(xué)習(xí)工具包,它通過有向圖將神經(jīng)網(wǎng)絡(luò)描述為一系列計(jì)算步驟。在有向圖中,葉節(jié)點(diǎn)表示輸入值或網(wǎng)絡(luò)參數(shù),而其他節(jié)點(diǎn)表示其輸入上的矩陣運(yùn)算。
CNTK允許用戶非常輕松地實(shí)現(xiàn)和組合流行的模型,包括前饋DNN,卷積網(wǎng)絡(luò)(CNN)和循環(huán)網(wǎng)絡(luò)(RNN / LSTM)。與目前大部分框架一樣,實(shí)現(xiàn)了自動(dòng)求導(dǎo),利用隨機(jī)梯度下降方法進(jìn)行優(yōu)化。
2、特點(diǎn)
(1) CNTK性能較高,按照其官方的說法,比其他的開源框架性能都更高。
(2) 適合做語音,CNTK本就是微軟語音團(tuán)隊(duì)開源的,自然是更合適做語音任務(wù),使用RNN等模型,以及在時(shí)空尺度分別進(jìn)行卷積非常容易。
cntk資料
8 Matconvnet
github地址:https://github.com/vlfeat/matconvnet。
1、概述
不同于各類深度學(xué)習(xí)框架廣泛使用的語言Python,MatConvnet是用matlab作為接口語言的開源深度學(xué)習(xí)庫(kù),底層語言是cuda。
2、特點(diǎn)
因?yàn)槭窃趍atlab下面,所以debug的過程非常的方便,而且本身就有很多的研究者一直都使用matlab語言,所以其實(shí)該語言的群體非常大。
matconvnet資料
9 Deeplearning4j
github地址:https://github.com/deeplearning4j/deeplearning4j。
1、概述
不同于深度學(xué)習(xí)廣泛應(yīng)用的語言Python,DL4J是為java和jvm編寫的開源深度學(xué)習(xí)庫(kù),支持各種深度學(xué)習(xí)模型。
2、特點(diǎn)
DL4J最重要的特點(diǎn)是支持分布式,可以在Spark和Hadoop上運(yùn)行,支持分布式CPU和GPU運(yùn)行。DL4J是為商業(yè)環(huán)境,而非研究所設(shè)計(jì)的,因此更加貼近某些生產(chǎn)環(huán)境。
Deeplearning4j資料
10 Chainer
github地址:https://github.com/chainer/chainer。
1、概述
chainer也是一個(gè)基于python的深度學(xué)習(xí)框架,能夠輕松直觀地編寫復(fù)雜的神經(jīng)網(wǎng)絡(luò)架構(gòu),在日本企業(yè)中應(yīng)用廣泛。
2、特點(diǎn)
chainer采用“Define-by-Run”方案,即通過實(shí)際的前向計(jì)算動(dòng)態(tài)定義網(wǎng)絡(luò)。更確切地說,chainer存儲(chǔ)計(jì)算歷史而不是編程邏輯,pytorch的動(dòng)態(tài)圖機(jī)制思想主要就來源于chainer。
chainer資料
11 Lasagne/Theano
github地址:https://github.com/Lasagne/Lasagne。
1、概述
Lasagen其實(shí)就是封裝了theano,后者是一個(gè)很老牌的框架,在2008年的時(shí)候就由Yoshua Bengio領(lǐng)導(dǎo)的蒙特利爾LISA組開源了。
2、特點(diǎn)
theano的使用成本高,需要從底層開始寫代碼構(gòu)建模型,Lasagen對(duì)其進(jìn)行了封裝,使得theano使用起來更簡(jiǎn)單。
Theano資料
12 Darknet
github地址:https://github.com/pjreddie/darknet。
1、概述
Darknet本身是Joseph Redmon為了Yolo系列開發(fā)的框架。
Joseph Redmon提出了Yolo v1,Yolo v2,Yolo v3。
2、特點(diǎn)
Darknet幾乎沒有依賴庫(kù),是從C和CUDA開始撰寫的深度學(xué)習(xí)開源框架,支持CPU和GPU。Darknet跟caffe頗有幾分相似之處,卻更加輕量級(jí),非常值得學(xué)習(xí)使用。
Darknet資料
3
后話
1、今天開源的這一套代碼還只包含圖像分類任務(wù),后續(xù)我們會(huì)增加其他計(jì)算機(jī)視覺任務(wù),歡迎小伙伴們前來參與,需要力量!
2、開源框架眾多,使用過程中必會(huì)出現(xiàn)N多問題,如果你想要更多的交流,就來有三AI知識(shí)星球吧,來日方長(zhǎng)。
轉(zhuǎn)載文章請(qǐng)后臺(tái)聯(lián)系
侵權(quán)必究
聯(lián)系客服