卷积神经网络架构:从基础到高级设计
立即解锁
发布时间: 2025-09-04 00:33:26 阅读量: 6 订阅数: 15 AIGC 


深度学习架构实战指南
# 卷积神经网络架构:从基础到高级设计
## 1. 卷积层参数计算与池化层的引入
在卷积神经网络(CNN)中,了解网络的规模对于确保有足够的计算资源来存储和处理网络至关重要。我们可以通过以下公式计算卷积层的参数数量:
参数数量 = 输入通道数 × 滤波器数量 × ((滤波器宽度 × 滤波器高度) + 1)
假设将相应的数值代入公式,可得到 416 个参数。若这些权重以 32 位浮点数(fp32)格式存储,那么所需的字节数为 416×32 位 / 8 = 1664 字节。当卷积层输出数据大小为 16x26x26 时,其空间维度的数据大小减小速度非常缓慢。为了将这些值缩小到目标数据的大小,就需要引入池化层。
## 2. 理解池化层
### 2.1 池化层的作用
仅通过 CNN 层对图像进行前向传播,二维输出数据的大小可能会有所减小,但仍然较大。池化层的作用是在保留有用信息的同时,战略性地聚合和整合数据值,可将其视为一种尽可能保留信息的图像调整大小方法。该层没有需要学习的参数,主要用于简单而有意义地减少输出数据。
### 2.2 池化层的工作方式
池化层采用与卷积层类似的滑动窗口滤波器过程,但不进行点积和添加偏置,而是进行某种聚合操作。聚合函数可以是最大聚合、最小聚合或平均聚合,应用这些聚合的层分别称为最大池化、最小池化和平均池化。
例如,在第一个 CNN 层之后应用一个滤波器大小为 4、步长为 2 的平均池化层,对 16x26x26 的输出进行前向传播,将得到 16x12x12 的数据大小,显著减小了数据规模。
### 2.3 全局池化层
另一种池化层是全局池化层,它将数据的整个二维宽度和高度分量聚合为一个单一值,将数据完全分解为一维结构,以便与一维目标兼容。在 Keras 库中可直接使用该层,而在 PyTorch 中,需要将池化滤波器大小设置为与输入特征图的大小相同来间接实现。
## 3. 构建 CNN 架构
### 3.1 逻辑块的概念
CNN 架构通常是通过依次堆叠多个概念性的逻辑块来构建的。这些逻辑块的结构相同,具有相同类型的层和层连接,但在参数配置上可能不同,如滤波器大小、步长、填充类型和填充量等。最简单的逻辑卷积块依次为卷积层、池化层和激活函数。填充是指在输入图像周围添加额外像素,以在卷积后保留其空间维度。逻辑块是一种简单高效地描述和引用架构的方式,还允许以深度可扩展的方式构建 CNN 架构,而无需逐个创建和设置每个层的设置。
### 3.2 架构设计示例
以下是一个使用 PyTorch 实现的简单 CNN 架构示例:
```python
import torch
import torch.nn as nn
import torch.nn.functional as F
class ConvArch(nn.Module):
def __init__(self):
super(ConvArch, self).__init__()
self.conv1 = nn.Conv2d(
in_channels=1, out_channels=12, kernel_size=4,
stride=2, padding=0
)
self.conv2 = nn.Conv2d(
in_channels=12, out_channels=5, kernel_size=3,
stride=1, padding=0
)
self.fc2 = nn.Linear(5, 3)
def forward(self, x):
x = F.relu(
F.avg_pool2d(
self.conv1(x), kernel_size=3, stride=2
)
)
x = F.relu(
F.avg_pool2d(
self.conv2(x), kernel_size=3, stride=1
)
)
x = F.avg_pool2d(x, kernel_size=x.size()[2:])
x = self.fc2(x.reshape((x.size()[:2])))
return x
```
在这个架构中,反向传播将由深度学习库自动处理。该架构基于基本分类问题类型构建,网络末尾的全连接网络通常称为头部,使用卷积层的逻辑块集合称为网络的骨干。网络的头部可以根据问题类型替换为其他结构,而骨干可以适应大多数架构,用于各种问题类型,如目标检测、图像生成、图像字幕或通过表示学习进行图像识别。
## 4. 实际应用中 CNN 架构的设计
### 4.1 与 MLP 设计的区别
在实际应用中,CNN 的设计不应与多层感知机(MLP)的设计方式相同。如今基于 CNN 已经取得了许多进展,这些进展通常有两种形式:
- 设定一个全新的基线,彻底重新设计 CNN 架构的构建方式。
- 在现有基线 CNN 架构的基础上进行构建,同时补充和提高基线架构的性能。
与 MLP 相比,CNN 理想的设计方法是使用已发表的 CNN 架构结构,而不是从头开始设计。CNN 架构的结构定义了层的类型以及不同类型层的连接方式,通常使用逻辑块来实现。特定结构的独特性定义了 CNN 架构的家族。
### 4.2 架构选择与性能测试
新的 CNN 研究进展通常有不同的尺寸
0
0
复制全文
相关推荐









