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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Friedrich Yuan

拒绝白嫖,从我做起!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值