關於cxxnet的平臺請參考http://www.csdn.net/article/2015-05-21/2824742?reload=1。
在https://github.com/dmlc下載cxxnet、dmlc-core、rabit、m-shadow,另外就是parameter_server是可選擇的,本教程不包括。Opencv在官網下載即可,最好是2.4.10版本的,這樣cxxnet的解決方案中就不必修改了。Openblas下載最新的即可。
2. 工程屬性修改
在cxxnet/windows/3rdparty目錄下拷貝opencv和openblas相關文件,拷哪些文件可參考cxxnet.vcxproj內容,同時需要將cxxnet.vcxproj中的cuda6.5改成你安裝的cuda的版本(一般有兩處),然後才能順利打開sln。其他幾個配套的庫,dmlc-core和rabit需要單獨編譯成lib庫,也需要修改對應的vcxproj文件,m-shadow是和cxxnet一起編譯的,所以不需要。
配置dmlc-core庫時,將平臺修改爲x64,附加包含目錄添加 $(SolutionDir)\..\..\dmlc-core\include,配置類型改爲靜態庫lib,平臺工具集要保持統一,我採用v120(否則後期會報版本錯),編譯成功後將dmlc.lib的目錄添加到cxxnet的庫目錄中並添加附加依賴項,或者將dmlc.lib拷貝到cxxnet已有庫目錄中並添加附加依賴項。
Rabit與dmlc-core差不多,不再贅述。
3. 代碼修改
在各種依賴庫都齊全後,立即編譯cxxnet還會出問題,因爲cxxnet的windows更新沒有原linux版本的速度快,因此會報錯。
a) /ox與/rtc1命令行選項不兼容
將優化選項改爲/od
b) 'Assert' : is not a member of'cxxnet::utils'
將cxxnet::utils改爲rabit::utils::Assert
c) syntax error : identifier'ImageRecordIOIterator'
在"iter_image_recordio-inl.hpp"文件中添加#define DMLC_USE_CXX11 1
4. 運行。
編譯成功後,在example/mnist目錄下新建data和models目錄,data下需要的四個mnist文件不再贅述,再添加bat文件,內容如下:
..\..\bin\cxxnet.exe MNIST.conf
Pause
運行bat文件,可能會報錯,需要libgfortran-3.dll,則下載adda_1.2_win64(https://a-dda.googlecode.com/files/adda_1.2_win64.zip),將其中的libgfortran_64-3.dll和libquadmath_64-0.dll拷貝到cxxnet的bin目錄下,並將libgfortran_64-3.dll修改爲libgfortran-3.dll即可。
然後運行bat文件即可,如下圖所示。