![a100f9f411caf0166b55e107819bce03.png](https://i-blog.csdnimg.cn/blog_migrate/fcbfa2a13a6d2165ef6e4afe1b237c52.jpeg)
这一次我们讲讲mxnet,相关的代码、数据都在我们 Git 上,希望大家 Follow 一下这个 Git 项目,后面会持续更新不同框架下的任务。
https://github.com/longpeng2008/LongPeng_ML_Course
01 mxnet是什么
mxnet是amazon的官方框架,下面参考mxnet的官方简介
https://mxnet-bing.readthedocs.io/en/latest/zh/overview.html
深度学习系统通常有两种编程方式,一种是声明式编程(declarative programming),用户只需要声明要做什么,而具体执行则由系统完成。以Caffe,TensorFlow的计算图为代表。优点是由于在真正开始计算的时候已经拿到了整个计算图,所以可以做一系列优化来提升性能。实现辅助函数也容易,例如对任何计算图都提供forward和backward函数,另外也方便对计算图进行可视化,将图保存到硬盘和从硬盘读取。缺点是debug很麻烦,监视一个复杂的计算图中的某个节点的中间结果并不简单,逻辑控制也不方便。
一种是命令式编程(imperative programming),以numpy,torch/pytorch为代表,每个语句按照原来的意思顺序执行。它 的特点是语义上容易理解,灵活,可以精确控制行为。通常可以无缝地和主语言交互,方便地利用主语言的各类算法,工具包,debug和性能调试器,但是实现统一的辅助函数和提供整体优化都很困难。
MXNet尝试将两种模式无缝的结合起来。在命令式编程上MXNet提供张量运算,进行模型的迭代训练和更新中的控制逻辑;在声明式编程中MXNet支持符号表达式,用来描述神经网络,并利用系统提供的自动求导来训练模型。
随着pytorch的崛起,mxnet已经掉出前三梯队,但不影响喜欢它的人使用。相比于重量级的tensorflow,mxnet非常轻量,占用内存少,分布式训练方便,常被用于比赛刷榜(见笔者以前用来刷榜的文)。
如何步入深度学习刷榜第一重境界
02 mxnet安装配置
喜欢自定义安装和精确控制版本的朋友,可以自行编译,喜欢偷懒的pip安装即可,方便快捷。
sudo pip install mxnet
不过如果你要多机多卡使用,还是源码编译安装吧。
https://github.com/apache/incubator-mxnet
03 mxnet自定义数据
下面就开始我们的任务,跟以往项目一样,从自定义数据和自定义网络开始。
mxnet分类任务要求的输入分类文件的格式与caffe不一样,为下面的格式,其中分别是序号,标签,路径
01../../../../../datas/mouth/1/182smile.jpg
11../../../../../datas/mouth/1/435smile.jpg
数据的载入需要用到接口DataBatch和DataIter
https://mxnet.incubator.apache.org/api/python/io/io.html
首先我们定义一下相关的参数配置,主要用于载入训练/测试数据集路径data-train,data-val,rgb均值rgb-mean,类别数目num-classes与训练样本集大小num-examples
def add_data_args(parser):
data = parser.add_argument_group('Data', 'the input images')
data.add_argument('--data-train', type=str, help='the training data')
data.add_argument('--data-val', type=str, help='the validation data')
data.add_argument('--rgb-mean', type=str, default='123.68,116.779,103.939',help='a tuple of size 3 for the mean rgb')
data.add_argument('--pad-size', type=int, default=0,
help='padding the input image')
data.add_argument('--image-shape', type=str,
help=