這是一篇總結(jié)文,給大家來(lái)捋清楚12大深度學(xué)習(xí)開(kāi)源框架的快速入門(mén)驰弄,這是有三AI的GitHub項(xiàng)目麻汰,歡迎大家star/fork。
https://github.com/longpeng2008/yousan.ai
1 概述
1.1 開(kāi)源框架總覽
現(xiàn)如今開(kāi)源生態(tài)非常完善戚篙,深度學(xué)習(xí)相關(guān)的開(kāi)源框架眾多五鲫,光是為人熟知的就有caffe,tensorflow岔擂,pytorch/caffe2臣镣,keras,mxnet智亮,paddldpaddle,theano点待,cntk阔蛉,deeplearning4j,matconvnet等癞埠。
如何選擇最適合你的開(kāi)源框架是一個(gè)問(wèn)題状原。有三AI在前段時(shí)間里,給大家整理了12個(gè)深度學(xué)習(xí)開(kāi)源框架快速入門(mén)的教程和代碼苗踪,供初學(xué)者進(jìn)行挑選颠区,一個(gè)合格的深度學(xué)習(xí)算法工程師怎么著得熟悉其中的3個(gè)以上吧。
下面是各大開(kāi)源框架的一個(gè)總覽通铲。
在這里我們還有一些框架沒(méi)有放上來(lái)毕莱,是因?yàn)樗鼈円呀?jīng)升級(jí)為大家更喜歡或者使用起來(lái)更加簡(jiǎn)單的版本,比如從torch->pytorch颅夺,從theano到lasagne朋截。另外這些框架都支持CUDA,因此編程語(yǔ)言這里也沒(méi)有寫(xiě)上cuda吧黄。
在選擇開(kāi)源框架時(shí)部服,要考慮很多原因,比如開(kāi)源生態(tài)的完善性拗慨,比如自己項(xiàng)目的需求廓八,比如自己熟悉的語(yǔ)言奉芦。當(dāng)然,現(xiàn)在已經(jīng)有很多開(kāi)源框架之間進(jìn)行互轉(zhuǎn)的開(kāi)源工具如MMDNN等剧蹂,也降低了大家遷移框架的學(xué)習(xí)成本声功。
除此之外還有tiny-dnn,ConvNetJS国夜,MarVin减噪,Neon等等小眾,以及CoreML等移動(dòng)端框架车吹,就不再一一介紹筹裕。
總的來(lái)說(shuō)對(duì)于選擇什么樣的框架,有三可以給出一些建議窄驹。
(1) 不管怎么說(shuō)朝卒,tensorflow/pytorch你都必須會(huì),這是目前開(kāi)發(fā)者最喜歡乐埠,開(kāi)源項(xiàng)目最豐富的兩個(gè)框架抗斤。
(2) 如果你要進(jìn)行移動(dòng)端算法的開(kāi)發(fā),那么Caffe是不能不會(huì)的丈咐。
(3) 如果你非常熟悉Matlab瑞眼,matconvnet你不應(yīng)該錯(cuò)過(guò)。
(4) 如果你追求高效輕量棵逊,那么darknet和mxnet你不能不熟悉伤疙。
(5) 如果你很懶,想寫(xiě)最少的代碼完成任務(wù)辆影,那么用keras吧徒像。
(6) 如果你是java程序員,那么掌握deeplearning4j沒(méi)錯(cuò)的蛙讥。
其他的框架锯蛀,也自有它的特點(diǎn),大家可以自己多去用用次慢。
1.2 如何學(xué)習(xí)開(kāi)源框架
要掌握好一個(gè)開(kāi)源框架旁涤,通常需要做到以下幾點(diǎn):
(1) 熟練掌握不同任務(wù)數(shù)據(jù)的準(zhǔn)備和使用。
(2) 熟練掌握模型的定義迫像。
(3) 熟練掌握訓(xùn)練過(guò)程和結(jié)果的可視化拭抬。
(4) 熟練掌握訓(xùn)練方法和測(cè)試方法。
一個(gè)框架侵蒙,官方都會(huì)開(kāi)放有若干的案例造虎,最常見(jiàn)的案例就是以MNISI數(shù)據(jù)接口+預(yù)訓(xùn)練模型的形式,供大家快速獲得結(jié)果纷闺,但是這明顯還不夠算凿,學(xué)習(xí)不應(yīng)該停留在跑通官方的demo上份蝴,而是要解決實(shí)際的問(wèn)題。
我們要學(xué)會(huì)從自定義數(shù)據(jù)讀取接口氓轰,自定義網(wǎng)絡(luò)的搭建婚夫,模型的訓(xùn)練,模型的可視化署鸡,模型的測(cè)試與部署等全方位進(jìn)行掌握案糙。
因此,我們開(kāi)設(shè)了一個(gè)《2小時(shí)快速入門(mén)開(kāi)源框架系列》靴庆,以一個(gè)圖像分類(lèi)任務(wù)為基準(zhǔn)时捌,帶領(lǐng)大家一步一步入門(mén),后續(xù)會(huì)增加分割炉抒,檢測(cè)等任務(wù)奢讨。
這是一個(gè)二分類(lèi)任務(wù),給大家準(zhǔn)備了500張微笑表情的圖片焰薄、500張無(wú)表情的圖片拿诸,放置在git工程的data目錄下,圖片預(yù)覽如下塞茅,已經(jīng)全部縮放到60*60的大心堵搿:
這是無(wú)表情的圖片:
這是微笑表情的圖片。
因此野瘦,我們的目標(biāo)就是利用這500張圖片完成好這個(gè)圖像分類(lèi)任務(wù)描沟。
在下面的所有框架的學(xué)習(xí)過(guò)程中,我們都要完成下面這個(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凛澎,即類(lèi)別數(shù)霹肝。
網(wǎng)絡(luò)結(jié)構(gòu)如下:
這是最簡(jiǎn)單的一種網(wǎng)絡(luò)結(jié)構(gòu),優(yōu)化的時(shí)候根據(jù)不同的框架预厌,采用了略有不同的方案阿迈。因?yàn)榇颂幍哪繕?biāo)不是為了比較各個(gè)框架的性能,所以沒(méi)有刻意保持完全一致轧叽。
2 開(kāi)源框架
下面我們開(kāi)始對(duì)各個(gè)框架進(jìn)行簡(jiǎn)述苗沧。
2.1 Caffe
github地址:https://github.com/BVLC/caffe。
(1) 概述:
Caffe是伯克利的賈揚(yáng)清主導(dǎo)開(kāi)發(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):
源代碼修改門(mén)檻較高,需要實(shí)現(xiàn)前向反向傳播侦副,以及CUDA代碼侦锯。
不支持自動(dòng)求導(dǎo)。
不支持模型級(jí)并行秦驯,只支持?jǐn)?shù)據(jù)級(jí)并行
不適合于非圖像任務(wù)尺碰。
鑒于caffe的學(xué)習(xí)有一定門(mén)檻,我給新手們提供一個(gè)自己錄制的視頻译隘。
有三說(shuō)深度學(xué)習(xí) - 網(wǎng)易云課堂?study.163.com
其他框架后續(xù)也會(huì)錄制亲桥,完整的系列視頻在網(wǎng)易云上,見(jiàn)《有三說(shuō)深度學(xué)習(xí)》固耘。
同時(shí)可以看下面的快速入門(mén)文檔题篷,以及閱讀相關(guān)的源代碼。
【caffe速成】caffe圖像分類(lèi)從模型自定義到測(cè)試?
2.2 Tensorflow
github地址:https://github.com/tensorflow/tensorflow厅目。
(1) 概述
TensorFlow是Google brain推出的開(kāi)源機(jī)器學(xué)習(xí)庫(kù)番枚,可用作各類(lèi)深度學(xué)習(xí)相關(guān)的任務(wù)。
TensorFlow = Tensor + Flow损敷,Tensor就是張量葫笼,代表N維數(shù)組,這與Caffe中的blob是類(lèi)似的拗馒;Flow即流路星,代表基于數(shù)據(jù)流圖的計(jì)算。
(2) 特點(diǎn)
TensorFlow最大的特點(diǎn)是計(jì)算圖瘟忱,即先定義好圖奥额,然后進(jìn)行運(yùn)算苫幢,所以所有的TensorFlow代碼访诱,都包含兩部分:
創(chuàng)建計(jì)算圖,表示計(jì)算的數(shù)據(jù)流韩肝。它做了什么呢触菜?實(shí)際上就是定義好了一些操作,你可以將它看做是Caffe中的prototxt的定義過(guò)程哀峻。
運(yùn)行會(huì)話涡相,執(zhí)行圖中的運(yùn)算哲泊,可以看作是Caffe中的訓(xùn)練過(guò)程。只是TensorFlow的會(huì)話比Caffe靈活很多催蝗,由于是Python 接口切威,取中間結(jié)果分析,Debug等方便很多丙号。
目前tensorflow已經(jīng)更新到2.0先朦,由于精力原因,筆者的代碼仍然以1.x版本為例犬缨。
【tensorflow速成】Tensorflow圖像分類(lèi)從模型自定義到測(cè)試?
2.3 Pytorch
github地址:https://github.com/pytorch/pytorch喳魏。
(1) 概述:一句話總結(jié)Pytorch = Python + Torch。
Torch是紐約大學(xué)的一個(gè)機(jī)器學(xué)習(xí)開(kāi)源框架怀薛,幾年前在學(xué)術(shù)界非常流行刺彩,包括Lecun等大佬都在使用。但是由于使用的是一種絕大部分人絕對(duì)沒(méi)有聽(tīng)過(guò)的Lua語(yǔ)言枝恋,導(dǎo)致很多人都被嚇退创倔。后來(lái)隨著Python的生態(tài)越來(lái)越完善,F(xiàn)acebook人工智能研究院推出了Pytorch并開(kāi)源鼓择。Pytorch不是簡(jiǎn)單的封裝Torch 并提供Python接口三幻,而是對(duì)Tensor以上的所有代碼進(jìn)行了重構(gòu),同TensorFlow一樣呐能,增加了自動(dòng)求導(dǎo)念搬。
后來(lái)Caffe2全部并入Pytorch,如今已經(jīng)成為了非常流行的框架摆出。很多最新的研究如風(fēng)格化朗徊、GAN等大多數(shù)采用Pytorch源碼撩独。
(2) 特點(diǎn)
動(dòng)態(tài)圖計(jì)算甫何。TensorFlow從靜態(tài)圖發(fā)展到了動(dòng)態(tài)圖機(jī)制Eager Execution,pytorch則一開(kāi)始就是動(dòng)態(tài)圖機(jī)制名秀。動(dòng)態(tài)圖機(jī)制的好處就是隨時(shí)隨地修改象踊,隨處debug温亲,沒(méi)有類(lèi)似編譯的過(guò)程。
簡(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速成】Pytorch圖像分類(lèi)從模型自定義到測(cè)試?
2.4 Mxnet
github地址:https://github.com/apache/incubator-mxnet号显。
(1) 概述
Mxnet是由李沐等人領(lǐng)導(dǎo)開(kāi)發(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á)式丐膝,用來(lái)描述神經(jīng)網(wǎng)絡(luò),并利用系統(tǒng)提供的自動(dòng)求導(dǎo)來(lái)訓(xùn)練模型钾菊。Mxnet性能非常高帅矗,推薦資源不夠的同學(xué)使用。
【mxnet速成】mxnet圖像分類(lèi)從模型自定義到測(cè)試?
2.5 Keras
github網(wǎng)址:https://github.com/keras-team/keras煞烫。
(1) 概述
Keras是一個(gè)對(duì)小白用戶(hù)非常友好而簡(jiǎn)單的深度學(xué)習(xí)框架浑此,嚴(yán)格來(lái)說(shuō)并不是一個(gè)開(kāi)源框架,而是一個(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)
高度模塊化原叮,搭建網(wǎng)絡(luò)非常簡(jiǎn)潔。
API很簡(jiǎn)單巡蘸,具有統(tǒng)一的風(fēng)格奋隶。
容易擴(kuò)展,只需使用python添加新類(lèi)和函數(shù)悦荒。
【Keras速成】Keras圖像分類(lèi)從模型自定義到測(cè)試?
2.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ò),整體使用起來(lái)與tensorflow非常類(lèi)似嘀趟,擁有中文幫助文檔脐区,在百度內(nèi)部也被用于推薦等任務(wù)。另外她按,配套了一個(gè)可視化框架visualdl牛隅,與tensorboard也有異曲同工之妙。國(guó)產(chǎn)框架不多酌泰,大家多支持懊接丁!
【paddlepaddle速成】paddlepaddle圖像分類(lèi)從模型自定義到測(cè)試?陵刹、
2.7 CNTK
github地址:https://github.com/Microsoft/CNTK默伍。
(1) 概述
CNTK是微軟開(kāi)源的深度學(xué)習(xí)工具包,它通過(guò)有向圖將神經(jīng)網(wǎng)絡(luò)描述為一系列計(jì)算步驟衰琐。在有向圖中也糊,葉節(jié)點(diǎn)表示輸入值或網(wǎng)絡(luò)參數(shù),而其他節(jié)點(diǎn)表示其輸入上的矩陣運(yùn)算羡宙。
CNTK允許用戶(hù)非常輕松地實(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)
CNTK性能較高指攒,按照其官方的說(shuō)法,比其他的開(kāi)源框架性能都更高僻焚。
適合做語(yǔ)音允悦,CNTK本就是微軟語(yǔ)音團(tuán)隊(duì)開(kāi)源的,自然是更合適做語(yǔ)音任務(wù)虑啤,使用RNN等模型隙弛,以及在時(shí)空尺度分別進(jìn)行卷積非常容易。
【cntk速成】cntk圖像分類(lèi)從模型自定義到測(cè)試
2.8 Matconvnet
github地址:https://github.com/vlfeat/matconvnet狞山。
(1) 概述
不同于各類(lèi)深度學(xué)習(xí)框架廣泛使用的語(yǔ)言Python全闷,MatConvnet是用matlab作為接口語(yǔ)言的開(kāi)源深度學(xué)習(xí)庫(kù),底層語(yǔ)言是cuda萍启。
(2) 特點(diǎn)
因?yàn)槭窃趍atlab下面总珠,所以debug的過(guò)程非常的方便屏鳍,而且本身就有很多的研究者一直都使用matlab語(yǔ)言,所以其實(shí)該語(yǔ)言的群體非常大局服。
【MatConvnet速成】MatConvnet圖像分類(lèi)從模型自定義到測(cè)試?
2.9 Deeplearning4j
github地址:https://github.com/deeplearning4j/deeplearning4j钓瞭。
(1) 概述
不同于深度學(xué)習(xí)廣泛應(yīng)用的語(yǔ)言Python,DL4J是為java和jvm編寫(xiě)的開(kāi)源深度學(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)境鳞溉。
【DL4J速成】Deeplearning4j圖像分類(lèi)從模型自定義到測(cè)試?
2.10 Chainer
github地址:https://github.com/chainer/chainer。
(1) 概述
chainer也是一個(gè)基于python的深度學(xué)習(xí)框架鼠哥,能夠輕松直觀地編寫(xiě)復(fù)雜的神經(jīng)網(wǎng)絡(luò)架構(gòu)穿挨,在日本企業(yè)中應(yīng)用廣泛。
(2) 特點(diǎn)
chainer采用“Define-by-Run”方案肴盏,即通過(guò)實(shí)際的前向計(jì)算動(dòng)態(tài)定義網(wǎng)絡(luò)科盛。更確切地說(shuō),chainer存儲(chǔ)計(jì)算歷史而不是編程邏輯菜皂,pytorch的動(dòng)態(tài)圖機(jī)制思想主要就來(lái)源于chainer贞绵。
【chainer速成】chainer圖像分類(lèi)從模型自定義到測(cè)試?
2.11 Lasagne/Theano
github地址:https://github.com/Lasagne/Lasagne。
(1)概述
Lasagen其實(shí)就是封裝了theano恍飘,后者是一個(gè)很老牌的框架榨崩,在2008年的時(shí)候就由Yoshua Bengio領(lǐng)導(dǎo)的蒙特利爾LISA組開(kāi)源了。
(2)特點(diǎn)
theano的使用成本高章母,需要從底層開(kāi)始寫(xiě)代碼構(gòu)建模型母蛛,Lasagen對(duì)其進(jìn)行了封裝,使得theano使用起來(lái)更簡(jiǎn)單乳怎。
【Lasagne速成】Lasagne/Theano圖像分類(lèi)從模型自定義到測(cè)試?
2.12 Darknet
github地址:https://github.com/pjreddie/darknet彩郊。
(1) 概述
Darknet本身是Joseph Redmon為了Yolo系列開(kāi)發(fā)的框架。
Joseph Redmon提出了Yolo v1蚪缀,Yolo v2秫逝,Yolo v3。
(2) 特點(diǎn)
Darknet幾乎沒(méi)有依賴(lài)庫(kù)询枚,是從C和CUDA開(kāi)始撰寫(xiě)的深度學(xué)習(xí)開(kāi)源框架违帆,支持CPU和GPU。Darknet跟caffe頗有幾分相似之處金蜀,卻更加輕量級(jí)刷后,非常值得學(xué)習(xí)使用的畴。
【darknet速成】Darknet圖像分類(lèi)從模型自定義到測(cè)試?
1、今天開(kāi)源的這一套代碼還只包含圖像分類(lèi)任務(wù)尝胆,后續(xù)我們會(huì)增加其他計(jì)算機(jī)視覺(jué)任務(wù)丧裁,歡迎小伙伴們前來(lái)參與,需要力量班巩!
作者:言有三
鏈接:http://www.reibang.com/p/16f69668ce25
來(lái)源:簡(jiǎn)書(shū)
簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處嘶炭。