(七)卷积层——填充和步幅

本文详细介绍了在卷积神经网络中如何计算不同步幅下输出的尺寸,并讨论了填充的作用及多输入输出通道的情况。

在高上使用步幅shs_hsh,在宽上使用步幅sws_wsw,那么输出大小将是
⌊(nh−kh+ph+sh)/sh⌋×⌊(nw−kw+pw+sw)/sw⌋. \lfloor(n_h-k_h+p_h+s_h)/s_h\rfloor \times \lfloor(n_w-k_w+p_w+s_w)/s_w\rfloor. (nhkh+ph+sh)/sh×(nwkw+pw+sw)/sw.
其中,nnn是输入的长或者宽,kkk是卷积核的长或者宽,ppp是在高或者宽两侧一共填充p行或者列(一般用0填充),sss是在高或者宽移动的步幅

1、默认步幅s=1s=1s=1

输出大小
⌊(nh−kh+ph+1)/1⌋=nh−kh+ph+1\lfloor(n_h-k_h+p_h+1)/1\rfloor= n_h-k_h+p_h+1(nhkh+ph+1)/1=nhkh+ph+1

如果,使得输入和输出有相同的高宽,则设置一共的填充ph=kh−1p_h=k_h-1ph=kh1pw=kw−1p_w=k_w-1pw=kw1

假设khk_hkh是奇数,那么在高的两侧分别填充ph/2p_h/2ph/2行。如果其是偶数,一种可能是上面填充⌈ph/2⌉⌈p_h/2⌉ph/2行,而下面填充⌊ph/2⌋⌊p_h/2⌋ph/2行。在宽上行为类似。卷积神经网络经常使用奇数高宽的卷积核,例如1、3、5、和7,所以填充在两端上是对称的。这样还有一点方便的是我们知道输出Y[i,j]是由输入以X[i,j] (原始矩阵) 为中心的窗口同卷积核进行相关计算得来。

2、步幅为通用时

计算输入元素滑动最后一次,填不满窗口时,我们将其结果舍弃。
设置一共的填充ph=kh−1p_h=k_h-1ph=kh1pw=kw−1p_w=k_w-1pw=kw1,输出大小简化为

⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋\lfloor(n_h+s_h-1)/s_h\rfloor \times \lfloor(n_w+s_w-1)/s_w\rfloor(nh+sh1)/sh×(nw+sw1)/sw

3、多输入和输出通道
多输入通道:

假设输入通道数是cic_ici,且卷积核窗口为kh×kwk_h×k_wkh×kw。当ci=1c_i=1ci=1时,我们知道卷积核就是一个kh×kwk_h×k_wkh×kw数组。当其大于1时,我们将会为每个输入通道分配一个单独的kh×kwk_h×k_wkh×kw核数组。我们将这些数组合并起来,将得到一个ci×kh×kwc_i×k_h×k_wci×kh×kw形状的卷积核。即输入通道数为n时候,相应的卷积核形状也跟着变(1×kh×kw1×k_h×k_w1×kh×kwn×kh×kwn×k_h×k_wn×kh×kw),但是数目依然算是1。
这里写图片描述
(1个输出通道只用1个卷积核)

多输出通道:

这里写图片描述
(n个输出通道需要用n个卷积核)

### 卷积层与卷积核的概念及作用 #### 一、卷积层的作用 卷积层是卷积神经网络 (Convolutional Neural Network, CNN) 的核心组成部分之一,主要负责从输入数据中提取局部特征。通过定义一组可训练的参数——即卷积核(也称为滤波器),卷积层能够执行特定的空间运算来捕捉图像或其他二维信号的关键特性[^3]。 具体来说,在处理图像时,卷积层可以用于检测诸如边缘、纹理以及更复杂的模式等低级到高级的视觉特征。这些特征被存储在一个被称为 **特征图** 的结构中,每张特征图对应于某个特定类型的特征响应[^1]。 #### 二、卷积核的功能 卷积核是一个小型矩阵,通常具有固定的大小(如 \(3 \times 3\) 或 \(5 \times 5\)),它是实现卷积操作的核心工具。在实际应用过程中,卷积核会滑动覆盖整个输入区域,并对该区域内像素值进行加权求计算,从而生成一个新的数值作为输出的一部分。这一过程可以通过 **互相关运算** 来描述[^2]: \[ y(i,j)=\sum_{m=0}^{k_h-1}\sum_{n=0}^{k_w-1}w(m,n)x(i+m,j+n)+b, \] 其中: - \( w(m, n) \) 表示卷积核中的权重; - \( x(i+m, j+n) \) 是输入数据的一个子集; - \( b \) 则代表偏置项。 上述公式展示了如何利用卷积核完成一次简单的二维互相关运算。值得注意的是,尽管术语上有时将此过程称为“卷积”,但实际上这里所指的操作通常是严格意义上的互相关而非传统意义下的卷积。 为了进一步增强模型表达能力并减少过拟合风险,实践中还引入了一些额外机制,比如设置合适的步幅(stride),控制每次移动的距离;或者采用零填充(padding),调整最终输出尺寸以适应不同需求。 以下是基于 Python PyTorch 实现的一个基础版本的二维卷积函数演示代码片段: ```python import torch.nn as nn class SimpleConvNet(nn.Module): def __init__(self): super(SimpleConvNet, self).__init__() # 定义一个单通道输入、两通道输出的3x3卷积层 self.conv_layer = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=(3, 3), stride=1, padding=1) def forward(self, x): return self.conv_layer(x) ``` 这段代码创建了一个非常简易版的卷积神经网络模块 `SimpleConvNet` ,其中包括一层标准的二维卷积层 `nn.Conv2d()` 。该层接受灰度图片作为输入(`in_channels=1`),并通过两个不同的卷积核分别生成两张新的特征映射(`out_channels=2`),同时保持原始分辨率不变 (`kernel_size=(3, 3)` 配合适当padding)[^3]. #### 三、两者之间的关系与差异 虽然卷积层卷积核密切相关,但它们之间存在明显区别: - **功能定位**: 卷积核专注于定义具体的数学变换方式; 而卷积层则综合管理多个这样的转换单元及其相互协作. - **数量规模**: 在同一个卷积层内部可能包含若干个独立工作的卷积核实例,各自承担着发现不同类型特征的任务. 综上所述,卷积层借助一系列精心设计好的卷积核实现了高效自动化的特征抽取流程,成为构建现代计算机视觉解决方案不可或缺的技术基石之一^.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值