深度学习系列(5):卷积神经网络(CNN)详解
在前几期中,我们讨论了深度神经网络(DNN)的基础知识以及梯度消失和爆炸问题。本期将重点介绍卷积神经网络(Convolutional Neural Networks, CNN),它是深度学习在图像处理领域的核心技术。
1. 卷积神经网络(CNN)的核心思想
CNN 通过局部感受野和权重共享机制,减少了参数数量,提高了计算效率,同时增强了模型对图像特征的学习能力。CNN 主要由以下几种层组成:
- 卷积层(Convolutional Layer):提取局部特征
- 池化层(Pooling Layer):降维,减少计算量
- 全连接层(Fully Connected Layer):用于最终分类或回归
2. CNN 的结构
典型的 CNN 由多个卷积层、池化层和全连接层组成。以下是一个常见的 CNN 结构:
输入 -> 卷积层 + ReLU -> 池化层 -> 卷积层 + ReLU -> 池化层 -> 全连接层 -> 输出
卷积层(Convolutional Layer)
卷积层的作用是提取特征,卷积操作的数学表达如下:
[
Y = W * X + b
]
其中:
- ( W ) 是卷积核(Kernel),它会滑动窗口进行特征提取
- ( X ) 是输入图像
- ( b ) 是偏置项
在 PyTorch 中实现卷积层:
import torch
import torch.nn as nn
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
池化层(Pooling Layer)
池化层的作用是降低维度,常见方法:
- 最大池化(Max Pooling):保留局部最大值
- 平均池化(Average Pooling):计算局部均值
PyTorch 代码:
pool_layer = nn.MaxPool2d(kernel_size=2, stride=2)
全连接层(Fully Connected Layer)
在经过多个卷积和池化层后,最终会使用全连接层进行分类:
fc_layer = nn.Linear(in_features=128, out_features=10)
3. CNN 的 PyTorch 实现
以下是一个简单的 CNN 结构:
import torch
import torch.nn as nn
import torch.optim as optim
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 16, 3, 1)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(16, 32, 3, 1)
self.fc1 = nn.Linear(32 * 6 * 6, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = torch.relu(self.conv1(x))
x = self.pool(x)
x = torch.relu(self.conv2(x))
x = self.pool(x)
x = x.view(-1, 32 * 6 * 6) # 展平成一维
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# 创建模型
model = SimpleCNN()
print(model)
4. CNN 在计算机视觉中的应用
CNN 在计算机视觉任务中表现出色,典型应用包括:
- 图像分类(Image Classification):如 ResNet、VGG
- 目标检测(Object Detection):如 Faster R-CNN、YOLO
- 图像分割(Image Segmentation):如 U-Net、Mask R-CNN
5. 结论
CNN 通过卷积操作有效提取图像特征,是深度学习在计算机视觉领域的核心技术。下一期将介绍 循环神经网络(RNN)及其应用,敬请期待!
下一期预告:循环神经网络(RNN)详解
957

被折叠的 条评论
为什么被折叠?



