本文中将给出一些编译好的依赖库,如果你也是用的Windows 7 64位+VS2013,可以直接使用。
2.准备依赖库
在Windows下配置caffe,一个很主要的问题就是依赖库的编译。不像在Ubuntu下那么方便,在Windows下,依赖库都需要使用vs2013进行编译才能使用。下面我将介绍caffe需要的依赖库(如果你也是win7 64位+VS2013,可以直接使用我提供的依赖库)。
2.1 boost
boost可以下载源码进行编译,也可以直接下载安装文件。我使用的是后者,方便、快捷。
我使用的是:boost_1.56_0-msvc-12.0-64.exe
注意下载适合你的配置环境的boost版本即可。
下载完毕,双击运行安装文件即可。
2.2 Glog+Gflag+Protobuf+LevelDB+HDF5+LMDB+Openblas
这一部分的很多都是谷歌的开源库,不容易下载(你懂的)。所以我使用的是Neil Z. SHAO‘s Blog
提供的编译好的。
下载完,解压得到3rdparty文件夹。在下一段将会用到。
3.建立caffe工程
准备好了caffe需要的依赖库和环境之后,下面就可以建立caffe的vs项目,进行编译了。
3.1 下载caffe源码
可以从caffe的github主页下载源码。
下载地址:Caffe’s GitHub
解压文件,假设caffe源码所在目录为CAFFE_ROOT。
3.2 准备项目需要的依赖库和系统环境变量
经过上一阶段的准备,caffe项目所需的依赖库都已经准备好。
1.首先设置系统环境变量(以我的为例):
CUDA_PATH_V6_5 安装好cuda6.5之后,会自动添加环境变量CUDA_PATH_V6_5
OPENCV_2_49 D:/Tools/opencv2.49/build/
BOOST_1_56 D:/Tools/boost_1_56_0
2.将3rdparty文件夹放到CAFFE_ROOT
3.3 用vs建立caffe项目
1.用VS2013在CAFFE_ROOT下建立 win32 console application,选择空项目。
将项目的平台由32位改为64位
1、会更新,finetune的过程相当于继续训练,跟直接训练的区别是初始化的时候:a. 直接训练是按照网络定义指定的方式初始化(如高斯随机初始化)
b. finetune是用你已经有的参数文件来初始化(就是之前训练好的caffemodel)
2、嗯,这个问题有两种情况:比如有4个全连接层A->B->C->D
a. 你希望C层的参数不会改变,C前面的AB层的参数也不会改变,这种情况也就是D层的梯度不往前反向传播到D层的输入blob(也就是C层的输出blob 没有得到梯度),你可以通过设置D层的propagate_down为false来做到。
propagate_down的数量与输入blob的数量相同,假如你某个层有2个输入blob,那么你应该在该layer的Param里面写上两行:
propagate_down : 0# 第1个输入blob不会得到反向传播的梯度
propagate_down : 0# 第2个输入blob不会得到反向传播的梯度
这样的话,你这个layer的梯度就不会反向传播啦,前面的所有layer的参数也就不会改变了
b. 你希望C层的参数不会改变,但是C前面的AB层的参数会改变,这种情况,只是固定了C层的参数,C层得到的梯度依然会反向传播给前面的B层。只需要将对应的参数blob的学习率调整为0:
你在layer里面加上param { lr_mult: 0 }就可以了,比如全连接层里面:
layer {
type: "InnerProduct"
param { # 对应第1个参数blob的配置,也就是全连接层的参数矩阵的配置
lr_mult: 0 # 学习率为0,其他参数可以看caffe.proto里面的ParamSpec这个类型
}
param { # 对应第2个参数blob的配置,也就是全连接层的偏置项的配置
lr_mult: 0 # 学习率为0
}
}
不知道这样说你能不能理解
如何在Caffe中配置每一个层的结构最近刚在电脑上装好Caffe,由于神经网络中有不同的层结构,不同类型的层又有不同的参数,所有就根据Caffe官网的说明文档做了一个简单的总结。
1. Vision Layers
1.1 卷积层(Convolution)
类型:CONVOLUTION
例子
layers {
name: "conv1"
type: CONVOLUTION
bottom: "data"
top: "conv1"
blobs_lr: 1 # learning rate multiplier for the filters
blobs_lr: 2 # learning rate multiplier for the biases
weight_decay: 1 # weight decay multiplier for the filters
weight_decay: 0 # weight decay multiplier for the biases
convolution_param {
num_output: 96 # learn 96 filters
kernel_size: 11# each filter is 11x11
stride: 4 # step 4 pixels between each filter application
weight_filler {
type: "gaussian" # initialize the filters from a Gaussian
std: 0.01# distribution with stdev 0.01 (default mean: 0)
}
bias_filler {
type: "constant" # initialize the biases to zero (0)
value: 0
}
}
}
blobs_lr: 学习率调整的参数,在上面的例子中设置权重学习率和运行中求解器给出的学习率一样,同时是偏置学习率为权重的两倍。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)