MXNet 粗糙的使用指南
寫於2020年3月24日,最新的CUDA版本爲10.2
MXNet簡介
MXNet是一個(跟TF與Torch相比特別小衆的)多平臺神經網絡框架。
優點:靈活,多平臺,可移植性強。工業界常用框架。
缺點:複雜,難以入門,基本沒有教材。只能依靠代碼來學習代碼。
框架介紹
MXNet現在存在兩種界面:symbol與gluon。
Symbol的設計思路與TF1.x版本的思路相似:靜態圖,手動指定模型,符號式編程。而Gluon則大大參考了Troch與Kreas:動態圖,依靠PY中的類進行模型構建,指令式編程。當然,爲了解決動態圖的效率問題,Gluon可以一鍵動態轉靜態,這使得Gluon的效率大大提升?(基於現在MXNet對動態圖的優化,這個差距好像只有2%)
唯一指定參考文檔
唯一指定文檔:http://mxnet.incubator.apache.org/api/python/docs/tutorials/
很不幸,這是僅此一份的可以使用的MXNet全面資料,而且沒有任何入門指南。
這裏是一些有關MXNet書籍的評價:
《動手學深度學習》:對於深度學習的各個應用講解的非常全面,但是太過依賴d2lzh庫了。作爲唯一一本MXNet入門書籍,是MXNet的教科書。缺點在於數據的預處理與特殊數據的讀取完全沒有涉及;自定義模塊的gluon方案也沒有講解。事實上,gluon的自定義做的非常差,這方面基本要依靠symbol來完成。
《MXNet深度學習實戰》:重點在於symbol模型的講解。作爲MXNet的老界面,symbol還在被廣泛使用當中。如上文所說,gluon還是一個不太完善的界面,很多部分要依靠symbol來補足。
模型下載
如果你的電腦的cuda是10.0版本的:使用pip mxnet-cu100
如果你的電腦的cuda是10.1版本的:使用pip mxnet-cu101
10.x版本以後的同理
如果你的電腦的cuda是9.0版本的:使用pip mxnet-cu90
如果你的電腦的cuda是9.2版本的:使用pip mxnet-cu92
x.y版本的同理
不要忘記安裝cuda以及cuda toolkit。不要試圖用conda安裝mxnet。Pip加速可以使用清華源。
數據保存與讀入
數據的保存方面對應的是這個API:mxnet.recordio.MXIndexedRecordIO
數據的讀入方面MXNet提供了兩個API:
其中,第一個對應目標識別,第二個對應目標檢測,具體用法百度即可。但是都不是很好用,事實上你可能必須要自己寫一個數據迭代器。如果要自己設計數據迭代器,建議原生numpy+py多線程。
此外,作爲讀取文件數據的CSVIter事實上已被棄用,不要使用它。如果你需要讀取文件數據,請自己寫一個數據迭代器:mxnet.io.io.DataIter是一個很不錯的基類。
模型構建與訓練
百度就完事了。這方面三家都大差不差。此外要注意·Gluon是沒有fit這種函數的。雖然有現成的訓練器,但是解決器還是需要自己動手寫的。
超出Gluon能力的自定義層使用symbol的這個API:CustomOP。比較複雜,需要Gluon模型靜態化後才能對接。需要注意的是,在Gluon模型中使用的CustomOP,無法對numpy做後臺運算,可能會對性能造成不可知的影響。
注:Gluon版本的fit函數叫Estimator。現在還在contrib模塊裏趴着,甚至沒有被編譯到pip直接可供下載的庫裏。不知道猴年馬月才能用上這個東西。’
遷移學習相關
MXNet本身沒有任何保存的模型。但是有一個附加庫叫做GluonCV,神奇的GluonCV!
GluonCV需要單獨安裝,裏面主要是一些訓練好的模型和一些特殊的損失函數,包括Focalloss,YOLOloss,SSD中用的IOUloss。這些可以極大的方便一些模型的實現。
總結
MXNet,不是很好用,但是安利大家都來試一試:畢竟他還在以飛快的速度更新,畢竟是第一個以國人爲主力的神經網絡框架,畢竟是我第一次見到竟然是以中文爲主的官方討論區。
一些鏈接
MXNet官網:http://mxnet.incubator.apache.org/
MXNet文檔:http://mxnet.incubator.apache.org/api/python/docs/tutorials/
MXNet下載方式:http://mxnet.incubator.apache.org/get_started
GluonCV官網:https://gluon-cv.mxnet.io/
GluonCV文檔:https://gluon-cv.mxnet.io/api/