当前位置:实例文章 » 其他实例» [文章]【动手学深度学习】--10.卷积神经网络

【动手学深度学习】--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 来处理图像数据。

其他信息

其他资源

Top