ubuntu下編譯Mxnet並用C++訓練用例

使用環境是WSL(Ubuntu 18.04),g++ 7.5.0

1、下載Mxnet源碼

git clone --recursive https://github.com/apache/incubator-mxnet mxnet 

此處一定要把recursive確保把子模塊一同下載下來,解壓,如果下載速度較慢或者網絡連接不順利時,比如出現

建議使用mxnet的鏡像,網址鏈接:https://gitlab.com/jackwish/mxnet

2、添加相應的依賴庫

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install libopencv-dev libatlas-base-dev libopenblas-dev

由於用的是自己的小破電腦,所以主要編譯cpu版,如果需要GPU版本,還需安裝GPU有關的cuda、cudnn

3、編譯

這裏使用make編譯Mxnet,首先修改配置,對mxnet/make/config.mk進行修改,

USE_CPP_PACKAGE=1

再對編譯選項進行修改,對mxnet源碼下的CMakeLists.txt進行修改,將有關cuda的選項關閉(因爲編譯的cpu版本)

mxnet_option(USE_CUDA             "Build with CUDA support"   OFF)
mxnet_option(USE_OLDCMAKECUDA     "Build with old cmake cuda" OFF)
mxnet_option(USE_NCCL             "Use NVidia NCCL with CUDA" OFF)
mxnet_option(USE_OPENCV           "Build with OpenCV support" ON)
mxnet_option(USE_OPENMP           "Build with Openmp support" ON)
mxnet_option(USE_CUDNN            "Build with cudnn support"  OFF) 
mxnet_option(USE_CPP_PACKAGE      "Build C++ Package" ON)

 

之後進行編譯,

cd mxnet
cp make/config.mk .
make -j4

編譯後會在mxnet/lib文件中出現libmxnet.alibmxnet.so

4、運行cpp-pakeage中的例子

這裏就編譯了很經典的例子:用mlp識別mnist手寫字體

4.1 下載數據

這裏下載數據有幾種辦法

第一種,運行mxnet/cpp-package/exmaple中的get_data.sh腳本,

sh get_data.sh

這裏運行時,會出現Syntax error: "(" unexpected**的錯誤,原因:兼容性問題,因爲linux將sh默認指向了dash,而不是bash,解決方法:在root下運行以下代碼,並選擇no,再次運行shell腳本

sudo dpkg-reconfigure dash

這種方法下載數據有點慢,建議直接在網站上下載,mnist的數據集挺好找的,不過注意下載mnist_train.csv,下載後並保存在data/mnist_data文件中,一定要解壓!!!不然後面運行程序會報錯,說找不到數據文件

4.2 編譯

下載數據後,在cpp-package/example中進行編譯

make all MXNET_USE_CPU=1

注意將MXNet共享庫的路徑添加到操作系統特定的環境變量中,否則會報錯: error while loading shared libraries: libmxnet.so: cannot open shared object file: No such file or directory

cd build
export LD_LIBRARY_PATH=../lib/:$LD_LIBRARY_PATH

在運行程序前,將mnist數據拷貝到build目錄下,否則會報錯: Error: File does not exist: ./data/mnist_data/train-images-idx3-ubyte,注意將data/mnist_data文件夾全部拷貝進去,再運行

./mlp_cpu

最後訓練結果如下:

以上標紅的地方几乎都是踩坑的地方,一定要注意,最好的建議看官方的手冊,介紹的很全,能遇到的問題幾乎上面都有解決方法,https://mxnet.apache.org/api/cpp/docs/tutorials/basics,可惜當初自己就是死活不看orz,所以說一定要看官方教程,它不香嗎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章