Caffe修炼之路(4)——卷积层和池化层详解

Caffe修炼之路(4)——卷积层和池化层详解


在这里插入图片描述

(一)前 言

上一节我们尝试着自定义卷积神经网络,然后对MNIST数据集进行了学习,效果还是很不错的,训练速度也很快,不愧是C++写的框架,我只能说:
在这里插入图片描述
这一节来好好说道说道卷积层和池化层的定义,毕竟是基础中的基础

(二)卷积层

首先来看卷积层,如下所示:

layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
  }
  convolution_param {
    num_output: 20
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
  • name: 卷积层的名字,随便写
  • type: 层类型,这写上"Convolution"表示是卷积层
  • bottom: 数据输入
  • top: 数据输出
  • param: 所有层共享的超参数,lr_mult表示该层的学习率为基本学习率乘以这个参数
  • convolution_param: 卷积参数层参数
    • num_output: 必填项,为卷积核个数
    • kernel_size: 必填项,为卷积核尺寸
    • stride: 选填项,为步进长度,默认为1
    • pad: 选填项,是否对image进行padding操作,默认为0,即不填充
    • weigt_filter: 选填项,权值初始化方法
    • bias_filter: 选填项,偏执项初始化方法
    • bias_term: 选填项,是否使用偏执项,默认为true

(三)池化层

引入池化层,如下:

layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
  • name: 池化层的名字,随便写
  • type: 层类型,这写上"Pooling"表示是池化层
  • bottom: 数据输入
  • top: 数据输出
  • pooling_param: 卷积参数层参数
    • pool: 必填项,为池化方式
    • kernel_size: 必填项,为卷积核尺寸
    • stride: 选填项,为步进长度,默认为1

(三)总 结

Caffe当中基本上定义所有操作都是通过layer字段来完成的,卷积、池化、激活函数、损失函数等等,太多了没法一一列举,其他的需要的可以参照官方的文档进行定义,链接如下:
http://caffe.berkeleyvision.org/tutorial/layers.html

发布了80 篇原创文章 · 获赞 74 · 访问量 32万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览