1、环境搭建
1.1 下载安装vs2013
1.2 下载安装matlabR2014a
1.3 下载安装cuda7.5
1.3.1 CUDA 7.5 安装
1.运行cuda_ 7.5.18_windows.exe,程序会检测系统的兼容性如下图: 
2.选择“同意并继续”,进入下图安装过程 (备注:安装cuda时,要关闭所有的vs程序,关闭360等管家软件) 
3.等待大概半个小时后,安装程序终于完成了。
1.3.2 添加环境变量
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
CUDA_PATH_V7_5 = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
然后,在系统变量path的末尾添加: %CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_BIN_PATH%;%CUDA_SDK_LIB_PATH%;
1.3.3 重启计算机使得环境变量生效
1.3.4 验证cuda7.5已正确安装:
打开cmd,输入$ nvcc -V,结果如下图:
2、安装配置MatConvNet
MatConvNet: CNNs for MATLAB
下载 ----- http://www.vlfeat.org/matconvnet/ 可以下载最新版
2.1.安装MatConvNet
1、untar('http://www.vlfeat.org/matconvnet/download/matconvnet-1.0-beta20.tar.gz') 是下载安装包的过程,建议单独下载其ZIP包,解压后放在任意位置,运行程序的时候会通过vl_setupnn()自动添加路径到Matlab中。下载时最好使用浏览器内置的下载器,因为迅雷下载下来的是一个txt文件,还需要转换。
下载压缩包matconvnet-1.0-beta20.tar.gz解压后,在examples文件夹下,可以找到相应数据集的卷积网络进行训练、或者使用。 经典模型都有,主要有Lenet、Alex、NiN、Vgg-face、VGG-F/S/M/VD、GoogleNet等CNN模型。而且,在训练之前,程序会自动下载数据集,CIFA-10,MNIST。但ImageNet数据太大需要手动下载。
在MATLAB中,打开文件夹matconvnet里的MATLAB文件夹,如下图所示,找到vl_compilenn.m文件。
2.2.编译MatConvNet的CPU版本
设置matlab的C++编译器,运行mex -setup, 再提示信息中选择VS C++;
在安装根目录下找到 函数function vl_compilenn(varargin),直接运行,默认为即CPU模式下编译。
最后显示“ MEX 成功!!”; 此时可以看到根目录下的mex文件夹下出现编译后的xxx.mex64文件。
若不配置GPU,则配置就此结束!!!!! 可以到examples下进行试验~~~~~~~~
这里,run matlab/vl_compilenn是编译的过程,前提是要求matlab与编译器(VSc++)实现连接,如果没有可以使用mex -setup命令,设置matlab的C++编译器,提示MEX成功,才可以运行example中的示例。这个实际上就是配置Matconvnet的过程,只需要两句话:mex -setup;run matlab/vl_compilenn
2.3.配置CUDA 7.5
1. 之前已经安装好了,现在打开 cuda samples 文件夹下 Samples_vs2013.sln 分别在DEBUG 和Release X64下进行完整编译。编译过程如提示找不到”d3dx9.h”、”d3dx10.h”、”d3dx11.h”头文件,则百度下载 DXSDK_Jun10.exe并安装。之后再重新编译。 (可参考 http://blog.sina.com.cn/s/blog_534497fd0102vbu3.html)
2. 编译cuda7.5自带的samples:在C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5目录下,用vs2013,打开Samples_vs2013.sln,在Release下,选中解决方案Samples_vs2013,重新生成解决方案,第一次编译会提示找不到”d3dx9.h”、”d3dx10.h”、”d3dx11.h”头文件,可从这里下载DXSDK_Jun10.exe,按照默认安装即可;然后重新打开Samples_vs2013,再编译即可,结果如下图:



4. 安装cudnn-win64-v4.0/or-v3.0
(1)解压缩:会生成cuda/include、cuda/lib、cuda/bin三个目录;分别将cuda/include、cuda/lib、cuda/bin三个目录中的内容拷贝到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5对应的include、lib、bin目录下即可。
(2)将cudnn64_4.dll 文件拷贝到 ./matconvnet/Matlab/mex文件夹下即可。
2.4.编译MatConvNet的GPU版本
在CUDA安装完成之后,即可调用 nvcc编译器 编译MatConvNet的GPU版本。
找到 function vl_compilenn(varargin) ,这是编译函数。
设置GPU编译器: opts.enableGPU =true ,opts.cudaMethod = 'nvcc' ; %意思就是调用NVIDIA compiler→ nvcc
注意:需要 将新的CUDA版本号‘7.5’添加到程序(即编译函数vl_complienn)中、供其查找CUDA路径。
编译完成后,运行cnn_cifa.m文件,运行前修改为GPU,不同版本修改为GPU的方式不同。在matconvnet-1.0-beta20中,修改cnn_cifa.m文件如下: opts.train.gpus = [1];指明使用GPU运行程序。
看到如下输出信息,说明成功。(这并不是我电脑的运行结果,这个显卡版本很不错了)
运行结果如下:
蓝色是训练错误率 绿色是测试错误率。
其中top1是前1命中错误率,top1是只让你猜一次;
在这里运行cnn_cifa.m文件时,出现如下错误:
然而,因为某种原因,它对NVIDIA系列早期型号的显卡支持并不好。以现在Amazon上白菜价都能买到的GeForce GT 610为例,在打开GPU支持进行编译后,可能会出现如下的编译错误:
经过网上查资料了解,这其实是因为MatConvNet的GPU编译代码中的一个Bug所导致。对于早期的显卡型号,它仅支持十的整数倍的GPU体系代码。在上面的例子中,如果将'compute_21'置换成‘compute_20’,便可以正常的编译了。为此,我们需要将vl_compilenn.m文件中的一个函数进行如下的修改:
如此一来,与GPU相关的代码就能正常编译了。不过需要注意的是,在编译时不要打开cuDNN的支持,否则在运行时,会因为编译和运行时GPU体系代码不一致,而导致程序异常结束。
所以,如果身边有闲置的机器但又苦于没有高端的GPU时,可以考虑购置一些低端的显卡。然后,用此方法编译、运行一些对GPU速度、内存需求不高的程序,以提高机器的利用率。
http://www.linuxidc.com/Linux/2016-12/138862.htm 64位Windows 7 安装配置CUDA7.5/8.0+cuDNN5.0图文详解
http://blog.youkuaiyun.com/raodotcong/article/details/58596841如何使用白菜价GPU运行基于MatConvNet的CNN程序