建议:环境搭建完成以后,不要更新系统(内核)
转载请注明出处: 微微苏荷html
系统:ubuntu16.04
显卡:gt940m
python: 2.7.12
GCC:5.3.0 (ubuntu 默认是5.4, 关于降级,后边有叙述)python
根据须要,opencv安装时提示,gcc 不支持5.3以上版本,因此降级。linux
wget ftp://mirrors.kernel.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz
c++
tar -zxvf gcc-5.3.0.tar.gz
git
cd gcc-5.3.0 //进入解包后的gcc文件夹 ./contrib/download_prerequisites //下载依赖项 cd .. //返回上层目录
mkdir gcc-build-5.3.0
github
5.进入输出目录,执行如下命令,并生成makefile文件:数据库
cd gcc-build-5.3.0 ../gcc-5.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
6.编译:
make -j4
接下来就是等待了,整个过程大约40分钟左右。PS:最好不要在编译过程当中再去作别的什么事,整个过程CPU都是满载的,要是莫名终止了,后面麻烦事也很多。编程
7.安装:
编译结束之后,咱们就能够执行安装了:
make install
ubuntu
8.检查版本:bash
gcc --version g++ --version
降级结束
sudo apt-get install gcc-4.8 gcc-4.8-multilib g++-4.8 g++-4.8-multilib sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 60 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
sudo update-alternatives --config gcc sudo update-alternatives --config g++
sudo dpkg -i cuda-repo-ubuntu1604-8-0-rc_8.0.27-1_amd64.deb sudo apt-get update sudo apt-get install -y cuda
新建cuda.conf
sudo gedit /etc/ld.so.conf.d/cuda.conf
并编辑,添加内容:
/usr/local/cuda/lib64 /lib
而后执行连接命令:
sudo ldconfig -v
而后设置环境变量:
export PATH=/usr/local/cuda/bin:$PATH$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH$
将这两行添加到~/.bashrc
cd /usr/local/cuda/samples sudo make all -j4 cd /usr/local/cuda/samples/bin/x86_64/linux/release sudo ./deviceQuery
运行成功,最后一行显示信息是 :
Result = PASS
这表示安装成功。
(方法1,在我尝试种没什么卵用,但有人成功了,真不幸遇到了,能够尝试一下)
(1)ctrl+alt+f1 进入命令行
(2)停掉lightdm 安装gdm
sudo stop lightdm sudo apt-get install gdm
而后作一些清理工做:
sudo rm -rf .gconf sudo rm -rf .gconfd sudo rm -rf ~/.Xauthority
重启:
sudo shutdown -r now
若是仍是不行,能够作接下来一步:
sudo apt-get update sudo apt-get install nvidia-current-updates sudo nvidia-xconfing sudo reboot
另外一种解决方案是,下载安装最新驱动(不黑屏的支持cuda的闭源驱动),而后安装cuda的run包,选择不安装显卡驱动便可。
安装显卡驱动:
sudo apt-get update sudo apt-get install nvidia-367 sudo apt-get install mesa-common-dev sudo apt-get install freeglut3-dev
安装cuda:
进入命令行界面
Ctrl+Alt+F1
关闭界面显示
sudo service lightdm chmod +x <cuda安装包名字>.run (给予权限) sudo ./ <cuda安装包名字>.run (安装)
注意:在选择是否安装选择显卡驱动时选择否。
而后关于环境变量设置,跟deb 安装方法中环境变量设置方法一致
ImportError: libcudart.so.7.5: cannot open shared object file: No such file
这是由于没有把CUDA的动态连接库加入PATH里,解决方法是,能够在./bashrc里面加入:
export LD_LIBRARY_PATH=/usr/local/cuda/targets/x86_64-linux/lib/:$LD_LIBRARY_PATH
或者是在编译MXnet的时候,在config.mk里的
ADD_LDFLAGS = -I/usr/local/cuda/targets/x86_64-linux/lib/ ADD_CFLAGS =-I/usr/local/cuda/targets/x86_64-linux/lib/
若是,在编译例子中有找不到×××.so 或某命令找不到,能够到/usr下搜索文件,添加文件路径到环境变量
注:关于黑屏和***.so找不到的状况只在14.04+cuda7.5时遇到过,16.04+cuda8.0没有遇到。
本文安装的是cudnn-8.0-linux-x64-v5.0-ga,请下载和你显卡匹配的版本
注:cudnn-8.0-linux-x64-v5.0-ga下载下来后缀名是.solitairetheme8,在ubuntu默认环境不能直接打开,我选择的是在window上解压。
切换到cudnn安装包文件夹下cuda/lib 目录下,执行:
sudo cp lib* /usr/local/cuda/lib64/
再切换到cudnn安装包文件夹下cuda/include 目录下:执行:
sudo cp cudnn.h /usr/local/cuda/include/
cd /usr/local/cuda/lib64/ sudo chmod u=rwx,g=rx,o=rx libcudnn.so.5.0.5 sudo rm -rf libcudnn.so.5 libcudnn.so sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5 sudo ln -s libcudnn.so.5 libcudnn.so
本文安装的是opencv2.4.13
注意,gcc版本不能超过5.3,不然请降级gcc(opencv3.10则不须要)
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev cmake libswscale-dev libjasper-dev
// 下列命令 opencv2.4和opencv3.10通用,cmake 时关闭了一些mxnet不须要的部分 mkdir build cd build cmake -D BUILD_opencv_gpu=OFF -D WITH_CUDA=OFF -D WITH_1394=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DINSTALL_CREATE_DISTRIB=OFF .. make -j4 sudo make install
而后,把3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64(不是build/3rdparty)目录下的libippicv.a 拷贝到 /usr/local/lib目录下
sudo gedit /etc/ld.so.conf.d/opencv.conf
在末尾加上:
/usr/local/lib
而后执行:
sudo ldconfig
打开/etc/bash.bashrc,加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
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 //若是须要编译指定版本,请先 checkout sudo cp make/config.mk
修改config.mk文件中的设置来自定义build:
USE_CUDA = 1 USE_CUDA_PATH = /usr/local/cuda USE_CUDNN =1
(可选 :选择安装atlas或者openblas等其余BLAS的实现,须要额外的修改。若是ubuntu的atlas实现(sudo apt-get install libatlas-base-dev或者sudo apt-get install libopenblas-dev))
而后编译
make -j4
sudo apt-get install python-setuptools python-numpy cd python sudo python setup.py install
建议使用python 2.7版本
/////////////////////////////////////////////////////////////////
没有找到cblas库问题:
解决方法:若是已经安装了openblas, 就从openblas中把cblas.h复制到/usr/include/中。
ps:我还遇到过另一个问题,是由于没有安装cblas库。下载编译cblas, 而后 把 libcblas.so copy到/usr/lib目录下就好了
注:有可能会遇到下载数据失败的状况,可将提早下载好的mnist数据放在例子运行目录下边
运行一下命令:
cd mxnet/example/image-classification python train_minst.py
默认是使用cpu,使用GPU使用下边命令:
python train_mnist.py --network lenet --gpus 0
先使用im2rec 制做出lst文件(保存图片和标签信息的文本的名字)
再使用im2rec 制做出rec文件 (mxnet可以使用)
imrec 参数以下:
通用选项:
prefix :LST或REC文件的前缀
root :包含图片文件的文件夹路径
用于建立lst数据的选项
--list:true制做lst,false 制做rec数据 ,默认false
--exts:可接受的图像后缀列表,type=list(可输入多个类型) 好比可输入:.jpeg
--chunks:计算块的大小 ,int 默认 1
--train-ratio:图像用于训练的比例
--test-ratio:图像用于测试的比例 (注:train和test比例之和不为1时,剩余比例为val)
--recursive:若是为true递归穿行子目录并为其分配一个惟一的标签
用于建立数据库(rec)的选项:
--resize:调整图片到指定大小,默认0不调整
--center-crop:是否指定裁剪中心,把图片裁剪为矩形
--quality:图片质量 ,JPEG质量编码,1-100;或PNG压缩编码,1-9
--num-thread:使用制做数据编码时的线程数,线程数大于1,可能会致使数据集的顺序不同(多线程并行)
--color:指定加载的图像的彩色模式。
1:加载彩色图像。图像的任何透明度将被忽略。默认为1。
0:灰度模式加载图像。
-1:加载图像,例如包括Alpha通道
--encoding:指定图像的编码 type=str, 默认.jpg
--shuffle:若是设置为true,im2rec将在制做lst数据时,随机图像顺序
--pack-label:是否为多维标签
根据须要选择参数便可。
注意:我在2016-08-29 clone的mxnet im2rec.py (0.7版也有)有两处bug:
opencv 图片大小变换错误,第93h行 和96行(二者交换) :
# newsize = (args.resize, img.shape[0] * args.resize / img.shape[1]) newsize = (img.shape[1] * args.resize / img.shape[0], args.resize) else: # newsize = (img.shape[1] * args.resize / img.shape[0], args.resize) newsize = (args.resize, img.shape[0] * args.resize / img.shape[1])
命令行参数解析,第156行修改可用:
# cgroup.add_argument('--exts', type=list, default=['.jpeg', '.jpg'], cgroup.add_argument('--exts', type=str, nargs='+', default=['.jpeg', '.jpg'],
举例:
数据放在了目录:/home/ecarx/English/Hnd/Img
制做list 命令:
python im2rec.py 0829 ~/English/Hnd/Img/ --list=true --exts=.png --chunks=1 --train-ratio=0.6 --test-ratio=0.4 –recursive=true
制做rec 命令(lst文件在当前目录):
python im2rec.py 0829 ~/English/Hnd/Img/ --resize=28 --encoding=.png
制做完数据集,可根据 train_imagenet.py 写数据迭代器,进行训练
注:mxnet v0.7 制做是先执行 make_lst.py,再进入 mxnet/bin 下执行 使用 im2rec(C++) 和以后新版稍有不一样
优势:
1.ndarray编程接口,相似matlab/numpy.ndarray/torch.tensor。独有优点在于经过背后的engine能够在性能上和内存使用上更优,(声明式)
2.symbolic接口。这个可使得快速构建一个神经网络,和自动求导。(命令式)
3.更多binding 目前支持比较好的是python,也支持julia和R
4.更加方便的多卡和多机运行
5.性能上更优。目前mxnet比cxxnet快40%,并且gpu内存使用少了一半。
6.依赖不多,经过mshadow的模板化使得gpu和cpu代码只用写一份,分布式接口也很干净
7.移动端支持较好,已经推出了手机上图片识别的demo
8.社区活跃,提Issuse 回复很快
缺点:
1.文档少,外界相关资料也较少,大部分只能代码当文档快(如今补齐)
2.没有大公司力推(亚马逊,已经支持mxnet 11.26)
可参考文档:
http://www.cnblogs.com/zhizhan/p/5118185.html
http://blog.csdn.net/myarrow/article/details/52064608
http://chenrudan.github.io/blog/2015/11/18/comparethreeopenlib.html#0-tsina-1-2654-397232819ff9a47a7b7e80a40613cfe1?utm_source=tuicool&utm_medium=referral
http://f.dataguru.cn/thread-679134-1-1.html