深度学习02:CNN


深度学习理论系列: 深度学习01

1 CNN的结构

1.1 卷积层

  由滤波器filters和激活函数构成。 一般要设置的超参数包括filters的数量、大小、步长,以及padding是“valid”还是“same”。当然,还包括选择什么激活函数。

1.1.1 padding 填白

  每次卷积前,先给图片周围都补一圈空白,让卷积之后图片跟原来一样大,同时,原来的边缘也被计算了更多次。比如把(8,8)的图片给补成(10,10),那么经过(3,3)的filter之后,还是(8,8),没有变。把卷积后大小不变称为 “Same”方式, 把不经过任何填白的,称为 “Valid”方式。
在这里插入图片描述

1.1.2 stride 步长

  默认步长是1,如果(8,8)的输入,我们用(3,3)的filter, 如果stride=1,则输出为(6,6); 如果stride=2,则输出为(3,3)

1.1.3 卷积

  如果input是一维8x8的黑白图片,filter是3x3,那卷积后的output是6x6
  如果input是三维8x8的彩色图片,filter是3x3x3(最后一个3表示filter是三维,这个维度要和input一致,如若input是2维,则filer也要2维),那卷积后的output也是6x6(三个channel的所有元素对应相乘后求和,也就是27个乘积的和),因为下图中filter只有对角线有非0,因此只乘了对角线,实际是表格中每个元素都要相乘。
在这里插入图片描述
  如果使用多个filters同时卷积,比如,如果我们同时使用4个filter的话,那么 输出的维度则会变为(6,6,4),相当于做了四次filter,每次filter输出的维度是(6,6,1)。
  如果用我们神经网络的符号来看待CNN的话:
  - 我们的输入图片就是X,shape=(8,8,3);
  - 4个filters其实就是第一层神金网络的参数W1,,shape=(3,3,3,4),这个4是指有4个filters;
  - 我们的输出,就是Z1,shape=(6,6,4);
  - 后面其实还应该有一个激活函数,比如relu,经过激活后,Z1变为A1,shape=(6,6,4);
在这里插入图片描述

1.2 池化层

该层主要是为了提取一定区域的主要特征,并减少参数数量,防止模型过拟合。方法有MaxPooling(取那个区域的max)还有AveragePooling(取那个区域的平均值)

1.2.1 max pooling

如下面的MaxPooling,采用了一个2×2的窗口,并取stride=2
在这里插入图片描述

1.3 全连接层

在进全连接层之前,会先Flatten,就是把 (height,width,channel)的数据压缩成长度为 height × width × channel 的一维数组,然后再与 FC层连接,这之后就跟普通的神经网络无异了。

2 CNN in Keras

  • 假设我们input是一个1×28×28的image
  • 通过25个filter的convolution layer以后你得到的output,会有25个channel,又因为filter的size是3×3,因此如果不考虑image边缘处的处理的话,得到的channel会是26×26的,因此通过第一个convolution得到25×26×26的cubic image(这里把这张image想象成长宽为26,高为25的cubic立方体)
  • 接下来就是做Max pooling,把2×2的pixel分为一组,然后从里面选一个最大的组成新的image,大小为25×13×13(cubic长宽各被砍掉一半)
  • 再做一次convolution,假设这次选择50个filter,每个filter size是33的话,output的channel就变成有50个,那13×13的image,通过33的filter,就会变成11×11,因此通过第二个convolution得到50×11×11的image(得到一个新的长宽为11,高为50的cubic)
    再做一次Max Pooling,变成50×50×5
    在这里插入图片描述
    需要注意的是在第一个convolution里面,每一个filter都有9个参数;但是在第二个convolution layer里面,虽然每一个filter都是3×3,但它其实不是3×3个参数,因为它的input是一个25×13×13的cubic,这个cubic的channel有25个,所以要用同样高度的cubic filter对它进行卷积,于是我们的filter实际上是一个25×3×3的cubic,所以这边每个filter共有225个参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值