Inception V1架构详情和卷积池化概念

本文详细介绍了Inception V1网络架构,包括卷积核、池化层的选择与理解,以及1x1卷积核的重要作用。通过1-5个卷积层的深度分析,展示Inception模块如何通过不同尺度的卷积进行信息整合。同时,讨论了池化层的降采样功能和参数计算方法,以及在整个网络中如何减少计算复杂度并提高模型性能。
摘要由CSDN通过智能技术生成

Inception V1架构卷积核池化参数(重要)

:下表中的“#3x3 reduce”,“#5x5 reduce”表示在3x3,5x5卷积操作之前使用了1x1卷积的数量。
在这里插入图片描述

0、输入

  原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)。
  深度是22层

1、conv1 深度1

  输入:224x224x3,目标输出:112x112x64

  使用7x7的卷积核(滑动步长2,padding为3,SAME),64通道,输出为112x112x64,卷积后进行ReLU操作,

  经过最大值池化:使用3x3的卷积核(滑动步长2,padding为1,SAME),输出为((112 - 3+1)/2)+1=56,即56x56x64,再进行ReLU操作。

1.1 卷积核大小选取(以前称为滤波器filter)

  大部分卷积神经网络都会采用逐层递增(1⇒ 3 ⇒ 5 ⇒ 7)的方式。每经过一次池化层,卷积层过滤器的深度都会乘以 2;
:卷积核具有的一个属性就是局部性。局部的程度取决于卷积核的大小。
  一个卷积核在与 Input 不同区域做卷积时,它的参数是固定不变的。放在 DNN 的框架中理解,就是对同一层 Layer 中的神经元而言,它们的 和 是相同的,只是所连接的节点在改变。因此在 CNN 里,这叫做 共享权值偏置。卷积核的权值不需要提前设计,而是跟 DNN 一样利用 GD 来优化,我们只需要初始化。
权值共享:减轻过拟合 & 降低计算量
  一个卷积层(Wx+b ⇒ ReLU ⇒ maxpooling)可以有多个不同的卷积核,而每一个卷积核都对应一个滤波后映射出的新图像,同一个新图像中的每一个像素都来自完全相同的卷积核,这就是卷积核的权值共享。权值共享的目的减轻过拟合 & 降低计算量

1.2 1x1卷积核意义

  1×1卷积核只有一个参数,这个核在输入上滑动,就相当于给输入数据乘以一个系数。(对于单通道和单个卷积核而言这样理解是可以的),看起来好像并没有什么意义,那它为什么还作用这么广泛了?可以从如下几个方向理解:

  • 实现跨通道的交互和信息整合。比如输入是多通道的,由卷积神经网络计算方式可知,对于单一卷积核函数:当前位置的输出值,是由多个通道上的卷积结果相加然后再取激活函数值得到的。所以卷积核函数的尺寸是1*1的话,他可以整合多个通道的信息,而不会改变输入的大小。
  • 卷积网络通道数目的升降,由于输出的通道数目是由卷积核函数的数目决定的,所以使用1*1的卷积核,在不改变输入大小的情况下,可以任意增减输出的通道数目。

1.3 池化层的理解

  pooling池化的作用则体现在降采样:保留显著特征、降低特征维度,增大kernel的感受野。max_pool(value, ksize, strides, padding, name=None), ksize一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1。池化输出特征图计算和卷积计算公式相同,区别是池化是求卷积区域中的max,不涉及卷积计算。
  池化层可对提取到的特征信息进行降维,一方面使特征图变小,简化网络计算复杂度并在一定程度上避免过拟合的出现;一方面进行特征压缩,提取主要特征。

:padding

  • 卷积层加入Padding,可以使得卷积层的输入维度和输出维度一致。
  • 池化层加入Padding,一般都是保持边界信息。如果没有加padding的话,输入图片最边缘的像素点信息只会被卷积核操作一次,但是图像中间的像素点会被扫描到很多遍,那么就会在一定程度上降低边界信息的参考程度,但是在加入padding之后,在实际处理过程中就会从新的边界进行操作,就从一定程度上解决了这个问题。。
      SAME:是填充,填充大小, p = (f-1)/2(f为卷积核大小,维度f通常是奇数);向上取整
      VALID:是不填充,直接计算输出,即令p=0向上取整

举例:池化输出特征图计算和卷积计算公式相同,区别是池化是求卷积区域中的max,不涉及卷积计算。

(1)pooling(kernel size 2×2,padding 0,stride 2)
  32*32*16->pooling之后(32-2+0)/2 + 1 =16*16
  pool3 = tf.nn.max_pool(layer3,[1,2,2,1],[1,2,2,1],padding=‘SAME’)
  padding = p = (f-1)/2=(2-1)/2=0

(2)pooling(kernel size 3×3,padding 0,stride 1)

  32*32*16 → pooling之后(32-3+0)/1 + 1 = 30*30
  pool3 = tf.nn.max_pool(layer3,[1,3,3,1],[1,1,1,1])

1.4 输出矩阵计算

  综合考虑步长、padding后,计算两个矩阵卷积后的输出矩阵的维度大小的公式如下:

  • 输入:n x n
  • 卷积核: f x f
  • padding: p
  • 步长strides: s

输出 [ [ ( n + 2 p − f ) / s ] + 1 ] × [ [ ( n + 2 p − f ) / s ] + 1 ] [[(n + 2p -f) /s] + 1] × [[(n + 2p -f) /s] + 1] [[(n+2pf)/s]+1]×[[(n+2pf)/s]+1]

对于VALID向上取整
[ ( n − f + 1 ) ) / s ] [(n -f + 1)) /s ] [(nf+1)/s]

对于SAME向上取整
[ n / s ] [n/s ] [n/s]
对于卷积神经网络来说,每个卷积层(l层)的维度变化如下:

import  tensorflow as tf
import numpy as np
input = tf.Variable(tf.random_normal([64, 5, 5, 3]))
filter =
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值