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/