caffe中的train_val.prototxt的文件的理解

本文以CaffeNet为例:
1. train_val.prototxt 
首先,train_val.prototxt文件是网络配置文件。该文件是在
训练的时 候用的。
2.deploy.prototxt
该文件是在测试时使用的文件。
区别:
首先deploy.prototxt文件都是在train_val.prototxt文件的基础上删除了一些东西,所形成的。
由于两个文件的性质,train_val.prototxt文件里面训练的部分都会在deploy.prototxt文件中删除。
在train_val.prototxt文件中,开头要加入一下训练设置文件和准备文件 。例如,transform_param中的mirror: true(开启镜像);crop_size: ***(图像尺寸);mean_file: ""(求解均值的文件),还有data_param中的source:""(处理过得数据训练集文件);batch_size: ***(训练图片每批次输入图片的数量);backend: LMDB(数据格式设置)。然后接下来,训练的时候还有一个测试的设置,测试和训练模式的设置通过一个include{phase: TEST/TRAIN}来设置。接下来就是要设置TEST模块内容。然后其他设置跟上面一样,里面有个batch_size可以调小一点,因为测试的话不需要特别多的图片数量。而以上这一块的内容在deploy里表现出来的只有一个数据层的设置。只需设置name,type,top,input_param这些即可。
接下来,第一个卷积层的设置 ,train_val.prototxt文件中多了param(反向传播学习率的设置),这里需要设置两个param一个时weight的学习率,一个时bias的学习率,其中一般bias的学习率是weight学习率的两倍。然后就是设置convolution_param,但是在train_val里面需要有weight_filler的初始化和对bias_filler的初始化。然后就是设置激活激活函数。这一块由于没有初始化,所以两个文件都是一样的。
再接下来就是池化层 ,由于池化就是降低分辨率,所以这两边是一样的,只需要设置kernel_size,stride,pool即可。无需参数的初始化。
再下来时LRN层 ,该层的全称是Local Response Normalization(局部响应值归一化),该层的作用就是对局部输入进行一个归一化操作,不过现在有论文表明,这一层加不加对结果影响不是很大, 有利于收敛 。但这一层的定义都是相同的。
再接下来就是"conv2" 、"relu2"、"pool2"、"LRN2"这样的循环,具体跟之前说的一样,train_val主要多的就是参数的初始化和学习率的设置。
在第五个卷积层之后,进入了"fc6"层,该层是全连接层,这里train_val里面还是多两个param学习率的设置,和weight_filler、bias_filler的初始化设置,而两者共同的是有一个输出向量元素个数的设置:inner_product_param。
再接下来就是激活函数RELU。
再接下来就是Dropout层,该层的目的就是为了防止模型过拟合。这其中有一个dropout_ration的设置一般为0.5即可。
再接下来就是"fc7",这一层跟"fc6"相同。然后就是"relu7"、"drop7"都是相同的。然后就是"fc8"也与之前相同。
再接下来就是Accuracy ,这个层是用来计算网络输出相对目标值的准确率,它实际上并不是一个损失层,所以没有反传操作。但是在caffe官网中,它在损失层这一部分。所以在deploy.prototxt文件中,这一层的定义是没有的。
再接下来train_val的最后一个层是"SoftmaxWithLoss"层 ,也是简单的定义了name,type,bottom,top就完了。而这一块的内容也不在deploy.prototxt文件中。而在deploy.prototxt文件中直接定义了一个type:"Softmax"。通过对CaffeNet这两个文件的查看发现deploy.prototxt文件 和train_val.prototxt文件之间的差异在很多层里面牵扯到训练部分的都会被删除,然后就是反向传播训练部分会被删除。
其中,这里面有一个区别在里头,就是为什么train_val里
面的是SoftmaxWithLoss而deploy里面的是Softmax层 (两个都是损失层,都没有任何参数):这里面其实都是softmax回归的应用,只是在定义成Softmax时直接计算了概率时还有forward部分,而在SoftmaxWithLoss部分时是还有backward的部分。所以这里就出现了区别,具体的区别可以看这两个文件的C++定义。
********solver.prototxt************************************************************************************************
在solver.prototxt文件中添加变量 :resultforsnap  = 0.64
在src/caffe/proto/caffe.proto 文件中,
message SolverParameter {}中添加:
optional float resultforsnap = 40 [default = 1e-8];
在include/caffe/solver.hpp文件中添加变量:
float maxresult;
如何使用:
在solver.cpp中调用示例为:
maxresult = param_.resultforsnap();  
并且一定要make clean--->make...
********train_val.prototxt************************************************************************************************
在prototxt文件中,添加:
softmaxloss_param
{
    temp: 0.5
 }
在src/caffe/proto/caffe.proto 文件中,
添加(如果已经有,就不用了):
optional SoftmaxLossParameter softmaxloss_param =41;(
ID要唯一)
同时添加:
message SoftmaxLossParameter {
  optional float temp= 1 [default =0.5];
}
如何使用?
请在对应的layer中,
this->layer_param_.softmaxloss_param().temp()
就可以调用其参数啦!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值