卷积神经网络的padding规则

本文详细介绍了TensorFlow中tf.nn.conv2d函数的使用方法及其参数意义,包括输入图像、卷积核、步长、填充方式等内容,并给出了不同填充方式下输出尺寸的计算公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

卷积函数 tf.nn.conv2d

声明:这里记录的是李金洪老师《深度学习之TensorFlow》一书上的知识点

TensorFlow里使用tf.nn.conv2d函数来实现卷积,其格式如下。
tf . nn. conv2d (input, filter, strides, padding, use_ cudnn on_ gpu=None,name=None)
除去参数name参数用以指定该操作的name,与方法有关的共有5个参数。
(1)input: 指需要做卷积的输入图像,它要求是一个Tensor, 具有[batch, in_height,in_width, in_channels]这样的形状,具体含义是“训练时一个batch的图片数量, 图片高度,图片宽度,图像通道数”,注意这是一个四维的Tensor,要求类型为float32和float64其中之一。
(2)filter: 相当于<font bg-colorCNN中的卷积核,它要求是一个Tensor, 具有[filter_height, filter_width,in_channels, out_channels]这样的形状,具体含义是“卷积核的高度,滤波器的宽度,图像通道数,滤波器个数”,要求类型与参数input相同。有一个地方需要注意,第三维in_channels,就是参数input的第四维。
(3)strides:卷积时在图像每一维的步长, 这是一个一维的向量,长度为4(分别是[batch方向,height方向,width方向,channels方向)很多同学只认为第一维和最后一维默认必须置1,其实strides参数确定了滑动窗口在各个维度上移动的步数。。
(4)padding: 定义元素边框与元素内容之间的空间。string类型的量,只能是SAME和VALID其中之一,这个值决定了不同的卷积方式,padding 的值为VALID时,表示边缘不填充,当其为’SAME时,表示填充到滤波器可以到达图像边缘。
(5)use cudnn on gpu: bool类型,是否使用cudnn加速,默认为true.
(6)返回值: tf.nn.conv2d函数结果返回一个Tensor, 这个输出就是常说的feature map.

注意:在卷积函数中, padding参数是最容易引起歧义的,该参数仅仅决定是否要补0,
因此一定要清楚padding设为SAME的真正含义。在设为SAME的情况下,只有在步长为1时生成的feature map才会与输入值相等。

padding规则介绍

padding属性的意义是定义元素边框与元素内容之间的空间。
在tf.nn.conv2d函数中,当变量padding为VALID和SAME时,行列数具体是怎么计算的呢?其实是有公式的。为了方便演示,先来定义几个变量:

  • 输入的尺寸中高和宽定义成in_height、in_width。
  • 卷积核的高和宽定义成filter_height、filter_width。
  • 输出的尺寸中高和宽定义成output_height、output_widh。
  • 步长的高宽方向定义成strides_height、 strides_width。
  1. VALID情况
    输出宽和高的公式代码分别为:

output_width = (in_width - filter_width + 1)/strides_width (结果问上取整)
output_height = (in_height - filter_height + 1)/strides_height (结果向上取整)

  1. SAME情况
    输出的宽和高将与卷积核没有关系,具休公式代码如下:

out_height = in_height / strides_height (结果向上取整)
out_width = in_width / strides_width (结果向上取整)

这里有一个很重要的知识点一补零的规则,见如下代码:

pad_height = max( (out_height - 1) X strides_height + filter_height - in_height,0)
pad_width = max((out_width - 1) X strides_width + filter_width - in_width, 0)
pad_top = pad_height / 2(结果取整)
pad_bottom = pad_height - pad_ top
pad_left = pad_width / 2(结果取整)
pad_right = pad_width - pad_left

我们可以看到补零的规则是优先在输入矩阵的右边和底边补零,例如补零的行数为三行则top一行,bottom两行;如果补零的行数为一行,则补在bottom。因为filter是从左向右从上到下滑动的,所以滑动到右边或者底边的时候有可能会因为大步长而损失边界信息,所以优先在右边和底边补零。
注:pad_height代表高度方向填充0的行数,pad_width代表宽度方向填充0的列数,以此类推。
### 新型卷积神经网络架构及应用 #### 1. 架构设计 新型卷积神经网络CNN)架构的设计通常以提高计算效率和模型性能为目标。例如,ShuffleNet V2 提出了高效卷积神经网络架构设计的实用指南[^4]。该架构通过分析组卷积和深度卷积的核心组件,优化了网络在低端设备上的运行时性能。ShuffleNet V2 的设计原则包括平衡计算量与参数数量、减少内存访问成本以及避免过多的逐点卷积操作,这些改进使其成为移动设备上图像分类任务的理想选择。 此外,ResNeXt 和 Xception 等架构也引入了分组卷积和深度可分离卷积的概念,进一步提升了模型的表达能力和计算效率。这些架构的设计理念为后续的 CNN 创新提供了重要参考。 #### 2. 应用领域 卷积神经网络的应用领域广泛,涵盖了计算机视觉的多个方面。其仿生视知觉机制使得 CNN 能够以较小的计算量学习格点化特征,如像素和音频数据,而无需额外的特征工程[^3]。以下是几个典型的应用场景: - **图像识别**:CNN 在 ImageNet 分类任务中的表现证明了其强大的特征提取能力。例如,ShuffleNet V2 和 MobileNet V2 等轻量化架构被广泛应用于手机等低端设备上的实时图像分类任务。 - **视频处理**:将 CNN 与循环神经网络(RNN)结合,可以处理时间序列数据,实现动作识别或视频分类[^2]。这种组合充分利用了 CNN 的空间特征提取能力和 RNN 的时间依赖建模能力。 - **医学影像分析**:CNN 被广泛用于医学影像的自动诊断,如 X 光片、MRI 和 CT 图像的病变检测。通过监督学习和非监督学习,CNN 能够从大量标注数据中学习到高维特征,从而提高诊断精度[^3]。 #### 3. 实现方式 在实现新型卷积神经网络时,需要关注以下几个关键点: - **轻量化设计**:为了适应移动端和嵌入式设备的需求,可以通过分组卷积、深度可分离卷积等技术降低计算复杂度。例如,MobileNet V2 使用深度可分离卷积显著减少了模型参数数量和计算量[^4]。 - **模块化构建**:现代 CNN 架构通常由多个模块组成,如残差块(Residual Block)、Inception 模块等。这些模块可以灵活组合,形成具有不同深度和宽度的网络结构。 - **自动化搜索**:神经架构搜索(NAS)技术能够自动发现高性能的 CNN 架构。例如,Google 提出的 EfficientNet 通过缩放规则实现了更优的精度-效率权衡[^4]。 ```python # 示例代码:使用 PyTorch 实现一个简单的卷积神经网络 import torch import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1) self.relu = nn.ReLU() self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.fc = nn.Linear(32 * 14 * 14, 10) def forward(self, x): x = self.conv1(x) x = self.relu(x) x = self.pool(x) x = x.view(x.size(0), -1) x = self.fc(x) return x model = SimpleCNN() print(model) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值