随着深度学习的快速发展,卷积神经网络(CNN)和循环神经网络(RNN)已经成为计算机视觉和序列建模中的两大核心模型。本文将简要介绍它们的基本原理、应用场景,并通过示例代码展示它们的基本使用方式。
一、卷积神经网络(CNN)
1. 原理简介
CNN 是专为图像处理设计的一类深度神经网络,它利用局部感受野、权值共享和池化操作,显著降低了参数数量,并提高了图像识别任务的效果。
核心组成部分包括:
-
卷积层(Convolutional Layer):提取图像局部特征。
-
激活函数(如 ReLU):引入非线性能力。
-
池化层(Pooling Layer):降维和增强特征鲁棒性。
-
全连接层(Fully Connected Layer):完成最终的分类或回归任务。
2. 典型应用
-
图像分类(如 MNIST、ImageNet)
-
目标检测(YOLO、Faster R-CNN)
-
图像分割(U-Net)
3. 示例代码(使用 PyTorch)
import torch
import torch.nn as nn
import torch.nn.functional as F
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 16, kernel_size=3, padding=1)
self.pool = nn.MaxPool2d(2, 2)
self.fc1 = nn.Linear(16 * 14 * 14, 10) # 28x28 input, pooled to 14x14
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = x.view(-1, 16 * 14 * 14)
x = self.fc1(x)
return x
# 示例输入:一张 28x28 的灰度图
model = SimpleCNN()
dummy_input = torch.randn(1, 1, 28, 28)
output = model(dummy_input)
print("CNN输出:", output)
二、循环神经网络(RNN)
1. 原理简介
RNN 适合处理序列数据(如文本、时间序列)。它通过隐藏状态(hidden state)在时间步之间传递信息,使模型具有记忆前文的能力。
存在梯度消失问题的传统 RNN,已逐渐被以下改进结构取代:
-
LSTM(长短期记忆网络)
-
GRU(门控循环单元)
2. 典型应用
-
语言建模与文本生成
-
语音识别
-
时间序列预测
3. 示例代码(使用 PyTorch)
import torch
import torch.nn as nn
class SimpleRNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleRNN, self).__init__()
self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
out, _ = self.rnn(x)
out = self.fc(out[:, -1, :]) # 只取最后一个时间步
return out
# 假设序列长度为5,每个时间步输入为10维
model = SimpleRNN(input_size=10, hidden_size=20, output_size=1)
dummy_input = torch.randn(3, 5, 10) # batch_size=3
output = model(dummy_input)
print("RNN输出:", output)
三、CNN 与 RNN 的对比总结
特性 | CNN | RNN |
---|---|---|
数据类型 | 空间数据(图像) | 时序数据(文本、语音) |
结构特点 | 局部连接、权重共享 | 时序连接、状态传递 |
典型应用 | 图像分类、目标检测 | 文本生成、机器翻译 |
可并行性 | 高(卷积操作) | 低(时间步依赖) |
输入维度 | 固定大小的图像 | 可变长度的序列 |
卷积神经网络(CNN)和循环神经网络(RNN)分别擅长处理不同类型的数据结构,模型结构对比如下图所示。
