建議:環境搭建完成以後,不要更新系統(內核)
轉載請註明出處: 微微蘇荷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