当前位置:   article > 正文

caffe模型参数含义_caffe模型 尺寸大小怎么看

caffe模型 尺寸大小怎么看

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

caffe网络模型文件定义了网络的每一层行为。

训练数据层代码如下:

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

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代码如下:

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

全连接层:

  1. layer {
  2. name: "ip1" //网络层的名称是ip1
  3. type: "InnerProduct" //网络层的类型是 全连接层
  4. bottom: "pool2" //网络层的输入时 pool2(第二池化层)
  5. top: "ip1" //网络层的输出名称是ip1
  6. param {
  7. lr_mult: 1 //卷积核的学习率系数是1
  8. }
  9. param {
  10. lr_mult: 2 //偏置的学习率系数是2
  11. }
  12. //第一全连接层参数设置
  13. inner_product_param {
  14. num_output: 500 //输出向量维度,500个输出神经元
  15. weight_filler {
  16. type: "xavier" //卷积核参数采用xavier方法初始化
  17. }
  18. bias_filler {
  19. type: "constant" //偏置初始值为0
  20. }
  21. }
  22. }

激活层ReLU代码如下:

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

输出层softmax代码如下:

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

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

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

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

参考博客:点击打开链接

点击打开链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/133392
推荐阅读
相关标签
  

闽ICP备14008679号