当前位置: 首页 > backend >正文

深度学习核心网络架构详解:从 CNN 到 LSTM

深度学习领域中,不同的网络架构适用于处理各种复杂的任务。本文将深入探讨几种必须掌握的核心网络架构,包括卷积神经网络 (CNN)、循环神经网络 (RNN) 及其变体长短时记忆网络 (LSTM) 和门控循环单元 (GRU),并结合具体案例和代码实现进行详细讲解。

一、卷积神经网络 (CNN)

1. 基本原理

卷积神经网络 (Convolutional Neural Network, CNN) 是专为处理具有网格结构数据(如图像)而设计的深度学习模型。其核心思想是通过卷积操作自动提取数据的局部特征,减少参数数量,提高训练效率。

CNN 的主要组件包括:

  • 卷积层 (Convolutional Layer):使用卷积核提取特征
  • 激活函数 (Activation Function):引入非线性特性
  • 池化层 (Pooling Layer):降低特征维度
  • 全连接层 (Fully Connected Layer):进行分类或回归

2. 案例:MNIST 手写数字识别

下面是一个使用 PyTorch 实现的 CNN 模型,用于识别 MNIST 数据集中的手写数字:

python

运行

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader# 定义数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))  # MNIST数据集的均值和标准差
])# 加载训练集和测试集
train_dataset = datasets.MNIST('data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST('data', train=False, transform=transform)train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=1000)# 定义CNN模型
class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Conv2d(1, 10, kernel_size=5)  # 输入通道1,输出通道10self.conv2 = nn.Conv2d(10, 20, kernel_size=5)  # 输入通道10,输出通道20self.conv2_drop = nn.Dropout2d()  # Dropout层,防止过拟合self.fc1 = nn.Linear(320, 50)  # 全连接层self.fc2 = nn.Linear(50, 10)  # 输出层,10个类别def forward(self, x):x = nn.functional.relu(nn.functional.max_pool2d(self.conv1(x), 2))x = nn.functional.relu(nn.functional.max_pool2d(self.conv2_drop(self.conv2(x)), 2))x = x.view(-1, 320)  # 展平为一维向量x = nn.functional.relu(self.fc1(x))x = nn.functional.dropout(x, training=self.training)x = self.fc2(x)return nn.functional.log_softmax(x, dim=1)# 初始化模型、损失函数和优化器
model = CNN()
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
def train(model, train_loader, optimizer, epoch):model.train()for batch_idx, (data, target) in enumerate(train_loader):optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()if batch_idx % 100 == 0:print(f'Train Epoch: {epoch} [{batch_idx * len(data)}/{len(train_loader.dataset)} 'f'({100. * batch_idx / len(train_loader):.0f}%)]\tLoss: {loss.item():.6f}')# 测试模型
def test(model, test_loader):model.eval()test_loss = 0correct = 0with torch.no_grad():for data, target in test_loader:output = model(data)test_loss += criterion(output, target).item()pred = output.argmax(dim=1, keepdim=True)correct += pred.eq(target.view_as(pred)).sum().item()test_loss /= len(test_loader.dataset)print(f'\nTest set: Average loss: {test_loss:.4f}, Accuracy: {correct}/{len(test_loader.dataset)} 'f'({100. * correct / len(test_loader.dataset):.2f}%)\n')# 训练模型
for epoch in range(1, 5):train(model, train_loader, optimizer, epoch)test(model, test_loader)

3. 模型解析

这个 CNN 模型的结构如下:

  • 第一个卷积层:接收 1 通道的 28×28 图像ÿ
http://www.xdnf.cn/news/9912.html

相关文章:

  • 关于DJI Cloud API Demo 终止维护公告-上云API源码停止维护
  • 文本预处理
  • 学习黑客小故事理解 Metasploit 的 Meterpreter
  • 【2025年电工杯数学建模竞赛A题】光伏电站发电功率日前预测问题+完整思路+paper+源码
  • BugKu Web渗透之备份是个好习惯
  • LeetCode Hot100(矩阵)
  • 逻辑回归知识点
  • stm32 + ads1292心率检测报警设置上下限
  • 鸿蒙分辨率
  • TDengine 运维——巡检工具(安装前检查)
  • 【Redis】第3节|深入理解Redis线程模型
  • 3.1.1栈的基本概念
  • 德国GEMÜ 3020特价型号3020 25D 7 1 4P002 3600
  • Java面试:从Spring Boot到分布式系统的技术探讨
  • VirtualBox安装 Rocky
  • AI绘画:手把手带你Stable Diffusion从入门到精通(系列教程)
  • window11系统 使用GO语言建立TDengine 连接
  • LLaMaFactory - 支持的模型和模板 常用命令
  • unordered_map与map之间的区别和联系
  • SpringBoot 日志
  • ROS云课基础篇-02-C++-250529
  • 财管2 - 财务预测(内含增长率,可持续增长率)
  • [9-2] USART串口外设 江协科技学习笔记(9个知识点)
  • 20250529-C#知识:继承、密封类、密封方法、重写
  • Oracle 条件判断
  • <线段树>
  • 影楼精修-AI追色算法解析
  • FEMFAT许可的有效期限
  • 从融智学视角对决策态度进行定理级提炼,结合三标准数学建模
  • vue3: tmap (腾讯地图)using typescript