0%

caffe中train_val.prototxt和deploy.prototxt文件的区别

2019年9月2日 下午2:22

浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 - fx409494616的博客 - CSDN博客

  1. deploy里表现出来的只有一个数据层的设置。(需设置name,type,top,input_param)
    1. 在train_val.prototxt文件中,开头要加入一下训练设置文件和准备文件。
      1. 例如,transform_param中的mirror:true(开启镜像);crop_size:(图像尺寸);mean_file:””(求解均值的文件),还有data_param中的source:””(处理过得数据训练集文件);batch_size:(训练图片每批次输入图片的数量);backend: LMDB(数据格式设置)。
    2. 然后接下来,训练的时候还有一个测试的设置,测试和训练模式的设置通过一个include{phase: TEST/TRAIN}来设置。接下来就是要设置TEST模块内容。然后其他设置跟上面一样,里面有个batch_size可以调小一点,因为测试的话不需要特别多的图片数量。
  2. 卷积层的设置
    1. train_val.prototxt文件中多了param(反向传播学习率的设置),这里需要设置两个param一个是weight的学习率,一个时bias的学习率,其中一般bias的学习率是weight学习率的两倍。
    2. 然后就是设置convolution_param,但是在train_val里面需要有对weight_filler的初始化和对bias_filler的初始化。
  3. 设置激活激活函数
    1. 这一块由于没有初始化,所以两个文件都是一样的。
  4. 池化层
    1. 由于池化就是降低分辨率,所以这两边是一样的,只需要设置kernel_size,stride,pool即可。无需参数的初始化。
  5. LRN层
    1. 该层的全称是Local Response Normalization(局部响应值归一化),该层的作用就是对局部输入进行一个归一化操作,不过现在有论文表明,这一层加不加对结果影响不是很大。但这一层的定义都是相同的。
  6. “fc6”层,该层是全连接层
    1. 这里train_val里面还是多两个param学习率的设置,和weight_filler、bias_filler的初始化设置,而两者共同的是有一个输出向量元素个数的设置:inner_product_param。
  7. 激活函数RELU
  8. Dropout层
    1. 该层的目的就是为了防止模型过拟合。这其中有一个dropout_ration的设置一般为0.5即可。
  9. Accuracy
    1. 这个层是用来计算网络输出相对目标值的准确率,它实际上并不是一个损失层,所以没有反传操作。但是在caffe官网中,它在损失层这一部分。所以在deploy.prototxt文件中,这一层的定义是没有的。
  10. train_val的最后一个层是“SoftmaxWithLoss”层
    1. 也是简单的定义了name,type,bottom,top就完了。而这一块的内容也不在deploy.prototxt文件中。
    2. 而在deploy.prototxt文件中直接定义了一个type:”Softmax”。
  11. 通过对CaffeNet这两个文件的查看发现deploy.prototxt文件和train_val.prototxt文件之间的差异在很多层里面::牵扯到训练部分的都会被删除,然后就是反向传播训练部分会被删除。train_val主要多的就是参数的初始化和学习率的设置::