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