2019年9月2日 下午2:22
浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 - fx409494616的博客 - CSDN博客
- deploy里表现出来的只有一个数据层的设置。(需设置name,type,top,input_param)
- 在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可以调小一点,因为测试的话不需要特别多的图片数量。
- 在train_val.prototxt文件中,开头要加入一下训练设置文件和准备文件。
- 卷积层的设置
- 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(局部响应值归一化),该层的作用就是对局部输入进行一个归一化操作,不过现在有论文表明,这一层加不加对结果影响不是很大。但这一层的定义都是相同的。
- “fc6”层,该层是全连接层
- 这里train_val里面还是多两个param学习率的设置,和weight_filler、bias_filler的初始化设置,而两者共同的是有一个输出向量元素个数的设置:inner_product_param。
- 激活函数RELU。
- Dropout层
- 该层的目的就是为了防止模型过拟合。这其中有一个dropout_ration的设置一般为0.5即可。
- 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主要多的就是参数的初始化和学习率的设置::