【github干货】主流深度学习开源框架从入门到熟练
文章首發于微信公眾號《有三AI》
【github干貨】主流深度學習開源框架從入門到熟練
今天送上有三AI學院第一個github項目
?
01項目背景
目前深度學習框架呈百家爭鳴之態勢,光是為人熟知的就有caffe,tensorflow,pytorch/caffe2,keras,mxnet,paddldpaddle,theano,cntk,tiny-dnn,deeplearning4j,matconvnet等,一個合格的深度學習算法工程師怎么著都得熟悉其中的3個以上吧。
而且,學習不應該停留在官方的demo上,而是要學會從自定義數據的讀取,自定義網絡的搭建,模型的訓練,模型的可視化,模型的測試與部署等全方位進行掌握。
因此,我們開設了這個github項目,以圖像分類任務為基準,帶領大家一步一步入門,后續會增加分割,檢測等任務。
當前的圖像分類任務為二分類的表情分類任務,為微笑與非微笑兩個類別,案例樣本如下。
無表情
微笑
?
02框架簡介
總的來說,深度學習系統通常有兩種編程方式,一種是聲明式編程(declarative programming),用戶只需要聲明要做什么,而具體執行則由系統完成。以Caffe,TensorFlow的計算圖為代表。優點是由于在真正開始計算的時候已經拿到了整個計算圖,所以可以做一系列優化來提升性能。實現輔助函數也容易,例如對任何計算圖都提供forward和backward函數,另外也方便對計算圖進行可視化,將圖保存到硬盤和從硬盤讀取。缺點是debug很麻煩,監視一個復雜的計算圖中的某個節點的中間結果并不簡單,邏輯控制也不方便。
一種是命令式編程(imperative programming),以numpy,torch/pytorch為代表,每個語句按照原來的意思順序執行。它 的特點是語義上容易理解,靈活,可以精確控制行為。通??梢詿o縫地和主語言交互,方便地利用主語言的各類算法,工具包,debug和性能調試器,但是實現統一的輔助函數和提供整體優化都很困難。
綜上,各有優劣,自由選擇,這里不是為了給大家詳細介紹框架,而是快速掃盲,更多請閱讀對應文章和官方文檔,相關代碼進行學習。
2.1 caffe
Caffe是伯克利的賈揚清主導開發,以C++/CUDA 代碼為主,最早的深度學習框架之一,比 TensorFlow、Mxnet、Pytorch 等都更早,需要進行編譯安裝。
支持命令行、Python和Matlab接口,單機多卡、多機多卡等都可以很方便的使用,快速入門見下文。
【caffe速成】caffe圖像分類從模型自定義到測試
2.2 tensorflow
TensorFlow是Google brain推出的開源機器學習庫,與Caffe一樣,主要用作深度學習相關的任務。與Caffe相比TensorFlow的安裝簡單很多。
TensorFlow = Tensor + Flow,Tensor 就是張量,代表N維數組,這與Caffe中的blob是類似的;Flow即流,代表基于數據流圖的計算。
TensorFlow最大的特點是計算圖,即先定義好圖,然后進行運算,所以所有的TensorFlow代碼,都包含兩部分:
(1) 創建計算圖,表示計算的數據流。它做了什么呢?實際上就是定義好了一些操作,你可以將它看做是Caffe中的prototxt 的定義過程。
(2)運行會話,執行圖中的運算,可以看作是Caffe中的訓練過程。只是TensorFlow的會話比Caffe靈活很多,由于是Python 接口,取中間結果分析,Debug等方便很多,快速入門見下文。
【tensorflow速成】Tensorflow圖像分類從模型自定義到測試
2.3 mxnet
mxnet是amazon的官方框架,它嘗試將上面說的兩種模式無縫的結合起來。在命令式編程上MXNet提供張量運算,進行模型的迭代訓練和更新中的控制邏輯;在聲明式編程中MXNet支持符號表達式,用來描述神經網絡,并利用系統提供的自動求導來訓練模型,快速入門見下文。
【mxnet速成】mxnet圖像分類從模型自定義到測試
2.4 pytorch?
一句話總結Pytorch = Python + Torch。
Torch是紐約大學的一個機器學習開源框架,幾年前在學術界非常流行,包括Lecun等大佬都在使用。但是由于使用的是一種絕大部分人絕對沒有聽過的Lua語言,導致很多人都被嚇退。后來隨著Python的生態越來越完善,Facebook人工智能研究院推出了Pytorch并開源。Pytorch不是簡單的封裝Torch 并提供Python 接口,而是對Tensor以上的所有代碼進行了重構,同TensorFlow一樣,增加了自動求導。
后來Caffe2全部并入Pytorch,如今已經成為了非常流行的框架。很多最新的研究如風格化、GAN等大多數采用Pytorch源碼,快速入門見下文。
【pytorch速成】Pytorch圖像分類從模型自定義到測試
2.5 paddlepaddle?
正所謂google有tensorflow,facebook有pytorch,amazon有mxnet,作為國內機器學習的先驅,百度也有PaddlePaddle,其中Paddle即Parallel Distributed Deep Learning(并行分布式深度學習),整體使用起來與tensorflow非常類似,可參考下文。
【paddlepaddle速成】paddlepaddle圖像分類從模型自定義到測試
2.6 keras
Keras是一個非常流行、簡單的深度學習框架,它的設計參考了torch,用Python語言編寫,是一個高度模塊化的神經網絡庫,能夠在TensorFlow,CNTK或Theano之上運行。 Keras的特點是能夠快速實現模型的搭建,是高效地進行科學研究的關鍵,可參考下文。
【Keras速成】Keras圖像分類從模型自定義到測試
2.7 其他
除了以上最常用的框架,還有theano,cntk,tiny-dnn,deeplearning 4j,matconvnet等,我們后續會補充教程,增強github案例,歡迎大家關注,下面是github項目鏈接,歡迎來做貢獻。
https://github.com/longpeng2008/LongPeng_ML_Course
感謝各位看官的耐心閱讀,不足之處希望多多指教。后續內容將會不定期奉上,歡迎大家關注有三公眾號 有三AI!
?
?
總結
以上是生活随笔為你收集整理的【github干货】主流深度学习开源框架从入门到熟练的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【资源放送】机器学习/深度学习最全公开视
- 下一篇: 【技术综述】深度学习中的数据增强(下)