caffe模型参数含义

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  
} 

*.solver.prototxt定义了网络训练过程中需要设置的参数,代码如下

net: "examples/mnist/lenet_train_test.prototxt"	//网络模型的目录,文件路径要从caffe的根目录开始
test_iter: 100	//迭代100次,test_iter×batch_size=需要训练的图片总数
test_interval: 500	//每训练500次,进行一次测试
base_lr: 0.01		//基础学习率
momentum: 0.9		//上一次梯度更新的权重
type: SGD		//优化算法选择,默认SGD
weight_decay: 0.0005	//权重衰减项,防止过拟合
lr_policy: "inv"	//对基础学习率进行调整的策略,如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power)
gamma: 0.0001
power: 0.75
display: 100		//每训练100次,在屏幕上显示一次。如果设置为0,则不显示。
max_iter: 20000		//最大迭代次数。这个数设置太小,会导致没有收敛,精确度很低。设置太大,会导致震荡,浪费时间。
snapshot: 5000		//用于设置训练多少次后进行保存
snapshot_prefix: "examples/mnist/lenet"	//保存路径
solver_mode: GPU	//设置运行模式

训练出的模型输出文件形式为*.caffemodel

参考博客:点击打开链接

点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值