caffe网络模型配置说明

参考:https://blog.csdn.net/cuxieqian4199/article/details/79914010

caffe模型需要两个最重要的参数文件:网络模型和参数模型,分别是*.prototxt和*.solver.prototxt文件。

本节介绍网络模型参数文件说明,参数模型文件说明参考《caffe参数模型配置说明

训练数据层

layer {
  name: "mnist"    //网络模型的名称
  type: "Data"    //输入层的类型
  top: "data"    //本层下一层连接data
  top: "label"    //本层下一层连接label
  include {
    phase: TRAIN    //训练阶段
  }
  transform_param {
   scale:0.00390625    //输入图片像素归一化到[0,1],1除以256为0.00390625
  }
  data_param {
    source: "examples/mnist/mnist_train_lmdb"    //需要训练数据的路径
    batch_size: 100    //批量处理数据大小
    backend: LMDB    //数据类型
  }
}

name: 表示该层的名称,可随意取。

type: 层类型,如果是Data,表示数据来源于LevelDB或LMDB。根据数据的来源不同,数据层的类型也不同。一般在练习的时候,我们都是采 用的LevelDB或LMDB数据,因此层类型设置为Data。

top或bottom: 每一层用bottom来输入数据,用top来输出数据。如果只有top没有bottom,则此层只有输出,没有输入。反之亦然。如果有多个 top或多个bottom,表示有多个blobs数据的输入和输出。

data 与 label: 在数据层中,至少有一个命名为data的top。如果有第二个top,一般命名为label。 这种(data,label)配对是分类模型所必需的。

include: 一般训练的时候和测试的时候,模型的层是不一样的。该层(layer)是属于训练阶段的层,还是属于测试阶段的层,需要用include来指定。如果没有include参数,则表示该层既在训练模型中,又在测试模型中。

Transformations: 数据的预处理,可以将数据变换到定义的范围内。如设置scale为0.00390625,实际上就是1/255, 即将输入数据由0-255归一化到0-1之间

卷积层Convoluation

layer {      
  name: "conv1"  //网络层的名称是conv1  
  type: "Convolution"  //网络层的类型是卷积层  
  bottom: "data"  //网络层的输入层是 data层  
  top: "conv1"   //该层的输出层名称为conv1  
  /*param定义权重和偏置的学习率,学习率大,迭代速度快,但是容易找不到最优解,学习率小,迭代速度慢,耗时久。如果有两个lr_mult参数,则第一个表示权重(卷积核)的学习率系数,第二个表示偏置的学习率系。lr_mult定义的只是学习率系数,最终的值需要乘以solver.prototxt配置文件中配置的base_lr的值,一般偏置的学习率系数是权重学习率系数的2倍*/
  param {  
    lr_mult: 1   //该层权重学习率的系数为1  
  }  
  param {  
    lr_mult: 2   //该层偏置学习率的系数为2  
  }  
 
  convolution_param {    //卷积操作的参数设置 
    num_output: 20   //卷积输出特征图的数量为20  
    kernel_size: 5      //卷积核的大小是5*5  
    stride: 1               //卷积操作的步长是1,即卷积核逐个移动  
    weight_filler {  	//滤波的类型
      type: "xavier"   //卷积核参数采用xavier方法初始化  
    }  
    bias_filler {  
      type: "constant"   //偏置初始值为0  
    }  
  }  
}

池化层Pooling

layer {  
  name: "pool1"      //网络层的名称是pool1  
  type: "Pooling"     //网络层的类型是池化层  
  bottom: "conv1"  //网络层的输入时conv1(第一卷积层)  
  top: "pool1"         //网络层的输出名称是 pool1  
  
  //池化操作的参数设置  
  pooling_param {  
    pool: MAX        //最大值池化  
    kernel_size: 2    //池化核尺寸 是2*2   
    stride: 2            //池化步长是2  
  }  
}

全连接层

layer {  
  name: "ip1"    //网络层的名称是ip1  
  type: "InnerProduct"    //网络层的类型是 全连接层  
  bottom: "pool2"          //网络层的输入时 pool2(第二池化层)  
  top: "ip1"                     //网络层的输出名称是ip1  
  param {  
    lr_mult: 1                  //卷积核的学习率系数是1  
  }  
  param {  
    lr_mult: 2                  //偏置的学习率系数是2  
  }  
  
  //第一全连接层参数设置  
  inner_product_param {   
    num_output: 500     //输出向量维度,500个输出神经元  
    weight_filler {  
      type: "xavier"          //卷积核参数采用xavier方法初始化  
    }  
    bias_filler {  
      type: "constant"        //偏置初始值为0  
    }  
  }  
}

激活层ReLU

layer {  
  name: "relu1"     //网络层的名称是relu1  
  type: "ReLU"      //网络层的类型是ReLU激活函数  
  bottom: "ip1"     //网络层的输入时ip1(第一全连接层)  
  top: "ip1"           //网络层的输出名称是 ip1,跟输入名称一样  
}

输出层Softmax

layer {  
  name: "prob"    //网络的名称是 prob  
  type: "Softmax"   //网络的类型是损失函数  
  bottom: "ip2"     //网络的输入是 ip2(第二全连接层)  
  top: "prob"       //网络的输出名称是 prob  
}

猜你喜欢

转载自blog.csdn.net/zong596568821xp/article/details/80908105
今日推荐