【动手学深度学习】--10.卷积神经网络
发布人:shili8
发布时间:2025-01-08 00:36
阅读次数:0
**卷积神经网络**
卷积神经网络(Convolutional Neural Networks, CNN)是深度学习中的一种常见架构,特别适合处理图像数据。CNN 的核心思想是模仿人类视觉系统中的特征提取过程,将原始图像分解为多个小块,然后使用卷积和池化操作来捕捉这些小块的特征。
**卷积层**
卷积层(Convolutional Layer)是 CNN 中最基本的组成部分。它接受一个输入图像,并输出一个特征图(Feature Map)。在卷积层中,使用多个过滤器(Filter)来扫描输入图像,每个过滤器都会产生一个特征图。
import torchimport torch.nn as nnclass ConvLayer(nn.Module): def __init__(self, in_channels, out_channels, kernel_size): super(ConvLayer, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size) def forward(self, x): return torch.relu(self.conv(x))
在上面的代码中,我们定义了一个卷积层类 `ConvLayer`,它接受三个参数:输入通道数 `in_channels`、输出通道数 `out_channels` 和过滤器大小 `kernel_size`。在 `forward` 方法中,我们使用 `torch.relu` 来激活输出特征图。
**池化层**
池化层(Pooling Layer)是 CNN 中另一个重要组成部分,它用于降低特征图的空间分辨率,从而减少参数数量和计算量。在池化层中,使用最大值或平均值来聚合每个过滤器的输出。
class PoolLayer(nn.Module): def __init__(self, kernel_size): super(PoolLayer, self).__init__() self.pool = nn.MaxPool2d(kernel_size=kernel_size) def forward(self, x): return self.pool(x)
在上面的代码中,我们定义了一个池化层类 `PoolLayer`,它接受一个参数:过滤器大小 `kernel_size`。在 `forward` 方法中,我们使用 `torch.nn.MaxPool2d` 来实现最大值池化。
**全连接层**
全连接层(Fully Connected Layer)是 CNN 中最后一个组成部分,它用于将特征图转换为输出结果。在全连接层中,使用多个神经元来计算每个输入特征的权重和偏置。
class FCLayer(nn.Module): def __init__(self, in_features, out_features): super(FCLayer, self).__init__() self.fc = nn.Linear(in_features, out_features) def forward(self, x): return torch.relu(self.fc(x))
在上面的代码中,我们定义了一个全连接层类 `FCLayer`,它接受两个参数:输入特征数 `in_features` 和输出特征数 `out_features`。在 `forward` 方法中,我们使用 `torch.relu` 来激活输出结果。
**卷积神经网络**
现在我们可以将上述组成部分组合起来,构建一个完整的卷积神经网络(CNN)。
class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() self.conv1 = ConvLayer(3,6, kernel_size=5) self.pool1 = PoolLayer(kernel_size=2) self.fc1 = FCLayer(12*12*6,120) def forward(self, x): out = self.conv1(x) out = self.pool1(out) out = torch.flatten(out,1) out = self.fc1(out) return out
在上面的代码中,我们定义了一个 CNN 类 `CNN`,它包含三个组成部分:卷积层、池化层和全连接层。在 `forward` 方法中,我们将输入数据传递给每个组成部分,并返回输出结果。
**总结**
在本文中,我们介绍了卷积神经网络(CNN)的基本概念和组成部分,包括卷积层、池化层和全连接层。我们还提供了示例代码来演示这些组成部分的实现。通过组合这些组成部分,我们可以构建一个完整的 CNN 来处理图像数据。