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