由于caffe依赖性太多,配置极其复杂,所以将接下来的学习转向mxnet.因此本文主要记录我的学习历程,如果描述有什么问题,欢迎大家的指正。
mxnet的优点很明显,简洁灵活效率高 ,多机多卡支持好。
mxnet的github下载链接:https://github.com/dmlc/mxnet/
mxnet的开发文档链接:http://mxnet.readthedocs.org/en/latest/build.html
开发文档清晰易读,包含安装、语法、示例等,并且还在不断丰富当中
目录
1- linux下安装mxnet和python接口配置
mxnet可以安装到linux、OSX和windows下。由于windows下配置相对较为复杂,故这里选择安装在linux下。 具体我的linux版本为64位的ubuntu14.04LTS,之前使用ubuntu15时发现不是很稳定。还有,这里我是在笔记本上安装的,因此没有安装CUDA、CUDNN之类的GPU管理程序。
mxnet支持在线安装,在终端中单步依次执行以下代码:
sudo apt-get update
sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev
git clone --recursive https://github.com/dmlc/mxnet
cd mxnet; make -j4
python接口的配置:
mxnet目前主要支持python、R和Julia这3种接口。我选择了相对熟悉的python。
mxnet要求2.7及以上版本的python和numpy库,一般linux都自带python编译器,因此我们只需要再检查一下是否缺少numpy库。可以直接输入下面的numpy安装代码:
sudo apt-get install python-numpy
上面处理完成之后可以尝试一下能否运行官方提供的一个案例:在mnist数据集上训练一个多层感知器MLP。
python mxnet/example/image-classification/train_mnist.py
如果之前配置过GPU(如何配置可以参考官方文档),可以尝试用GPU测试一下网络:
python mxnet/example/image-classification/train_mnist.py --network lenet --gpus 0
注意:上述过程完成后,直接在python中执行以下代码(如 import mxnet as mx)可能会提示“no module named ”,这可能是因为未添加路径导致的。可以通过单步依次执行下面代码解决:
// ~表示我的mxnet安装在home下面
export PYTHONPATH=~/mxnet/python
cp -r ~/mxnet/python/mxnet .
cp ~/mxnet/lib/libmxnet.so mxnet/
2- 如何将训练图片转换格式并送入网络
就好像在caffe中训练模型之前要现将训练图片转化为leveldb或者LMDB格式数据一样,mxnet在训练之前也要先将图片转化为REC格式的数据。
这里直接记录转换过程,后续会详细讲解REC数据格式的编码以及最终如何将REC格式数据再加载到网络当中。
linux下转换使用的工具是mxnet/bin下名为“im2rec”的可执行文件,该文件的源码可以查看mxnet/tools/im2rec.cc
首先,来说明以下im2rec这个转换工具有哪些输入参数:
首先是必须输入的3个参数,依次是
image_lst: //保存图片和标签信息的文本的名字
image_root_dir://图片的存放路径
output_rec://转换后的.rec格式文件的存放路径
可选的输入参数有:
label_width://