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

PyTorch经典模型

PyTorch 经典模型教程

1. PyTorch 库架构概述

PyTorch 是一个广泛使用的深度学习框架,具有高度的灵活性和动态计算图的特性。它支持自动求导功能,并且拥有强大的 GPU 加速能力,适用于各种神经网络模型的训练与部署。

PyTorch 的核心架构包括:

  • 张量(Tensor)操作:PyTorch 的 Tensor 类是与 NumPy 类似的数据结构,并支持 GPU 加速的操作。
  • 自动微分引擎(autograd):支持反向传播及自动求导,帮助轻松实现模型的训练。
  • 模块(torch.nn.Module):用于定义神经网络的核心组件。
  • 优化器(torch.optim):用于调整模型参数以最小化损失函数。
  • DataLoader:用于处理大批量数据,支持批量加载和数据增强。
2. 官方文档链接

PyTorch 官方文档

3. 经典模型概述

PyTorch 提供了很多经典的神经网络模型,可以用作基础构建模块。以下是一些经典的深度学习模型,它们广泛应用于图像分类、物体检测、语音识别、自然语言处理等任务。

经典模型:
  • LeNet:经典的卷积神经网络 (CNN),主要用于手写数字识别。
  • AlexNet:在图像分类任务中非常著名的 CNN,曾在 ImageNet 比赛中获胜。
  • VGGNet:更深层的卷积神经网络,特点是使用小卷积核 (3x3) 堆叠。
  • ResNet:深度残差网络,通过引入跳跃连接解决了深层网络的梯度消失问题。
  • InceptionNet:通过并行卷积核和池化操作增强了特征提取的能力。
  • Transformer:广泛应用于自然语言处理的架构,引入了自注意力机制。
4. 基础模型教程
4.1 搭建 LeNet 模型

LeNet 是一个非常简单的卷积神经网络,主要用于手写数字识别任务。

示例代码

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F# 定义 LeNet 网络结构
class LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__()self.conv1 = nn.Conv2d(1, 6, 5)     # 输入通道为1(灰度图),输出通道为6,卷积核大小为5self.conv2 = nn.Conv2d(6, 16, 5)    # 输入通道为6,输出通道为16self.fc1 = nn.Linear(16 * 5 * 5, 120) # 全连接层,输入大小为16*5*5,输出大小为120self.fc2 = nn.Linear(120, 84)       # 全连接层,输出为84self.fc3 = nn.Linear(84, 10)        # 输出为10(10个类别)def forward(self, x):x = F.max_pool2d(F.relu(self.conv1(x)), 2) # 卷积 + ReLU + 最大池化x = F.max_pool2d(F.relu(self.conv2(x)), 2) # 卷积 + ReLU + 最大池化x = x.view(-1, 16 * 5 * 5)          # 展平特征图x = F.relu(self.fc1(x))             # 全连接层 + ReLUx = F.relu(self.fc2(x))             # 全连接层 + ReLUx = self.fc3(x)                     # 输出层return x# 实例化模型并定义损失函数和优化器
model = LeNet()
criterion = nn.CrossEntropyLoss()  # 交叉熵损失
optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器,学习率0.001

说明

  • LeNet 包含两个卷积层,后接三个全连接层,用于简单的图像分类任务。
  • 使用 CrossEntropyLoss 作为分类任务的损失函数,Adam 作为优化器。
5. 进阶模型教程
5.1 构建 ResNet 模型

ResNet 是一个深度残差网络,提出了残差块的概念,解决了深层网络的梯度消失问题。你可以使用 torchvision 模块中的预训练 ResNet 模型,或从头开始构建。

示例代码

import torch
import torchvision.models as models
from torchsummary import summary# 加载预训练的 ResNet-18 模型
model = models.resnet18(pretrained=True)# 打印模型结构
summary(model, input_size=(3, 224, 224))

说明

  • torchvision.models 中包含预训练的经典网络模型(如 ResNet、VGG 等),可以直接加载并用于迁移学习任务。
  • summary 函数可以打印模型的结构和参数数量。
5.2 迁移学习:微调预训练模型

利用预训练的 ResNet 模型,冻结前几层权重,并微调最后几层以适应特定任务(如自定义图像分类)。

示例代码

import torch.nn as nn
import torchvision.models as models# 加载预训练的 ResNet-18 模型
model = models.resnet18(pretrained=True)# 冻结 ResNet 的前几层(特征提取器部分)
for param in model.parameters():param.requires_grad = False# 修改最后的全连接层,使其输出类别为我们需要的数量
num_ftrs = model.fc.in_features  # 提取原始全连接层的输入特征数
model.fc = nn.Linear(num_ftrs, 2)  # 假设我们只需要2个类别的分类# 现在只会训练最后一层的权重
optimizer = torch.optim.SGD(model.fc.parameters(), lr=0.001, momentum=0.9)
criterion = nn.CrossEntropyLoss()

说明

  • requires_grad=False 冻结网络的前几层参数,使其在训练过程中保持不变;
  • 通过修改最后一层全连接层,可以适配任意数量的输出类别。
6. 高级教程
6.1 Transformer 模型

Transformer 是一种强大的自注意力机制模型,广泛应用于自然语言处理任务。在 PyTorch 中可以使用 torch.nn.Transformer 来构建模型。

示例代码

import torch
import torch.nn as nn# 定义 Transformer 模型
model = nn.Transformer(nhead=8, num_encoder_layers=6)# 假设输入大小为 (sequence_length, batch_size, embedding_dim)
src = torch.rand((10, 32, 512))  # 源输入序列
tgt = torch.rand((20, 32, 512))  # 目标输出序列# 前向传播
output = model(src, tgt)
print(output.shape)

说明

  • nn.Transformer 定义了一个包含多层编码器和解码器的 Transformer 模型,nhead=8 表示多头注意力机制中的 8 个头。
  • srctgt 是输入和输出序列的张量,输入的形状为 (sequence_length, batch_size, embedding_dim)
6.2 自定义注意力机制

你还可以通过 PyTorch 实现自定义的注意力机制,并将其集成到 Transformer 或其他深度学习模型中。

7. 总结

PyTorch 提供了非常灵活和强大的工具来构建和训练经典深度学习模型。无论是卷积神经网络 (CNN) 还是基于注意力机制的模型,PyTorch 都能轻松实现并支持 GPU 加速。通过预训练模型和迁移学习,开发者可以更快速地应用这些经典模型进行不同的任务。

更多详细信息和教程请查阅 PyTorch 官方文档。


http://www.mrgr.cn/news/30453.html

相关文章:

  • java序列化对象后读取数据错误的问题
  • 初学者笔记本电脑玩转大模型系列一:利用ollama跑大模型
  • Ceph官方文档_01_Ceph简介
  • C++ prime plus-4-编程练习
  • 【读书笔记-《30天自制操作系统》-22】Day23
  • 枚举(not二分)
  • 【移动端开发】“明日头条APP”
  • 【Java】网络编程-地址管理-IP协议后序-NAT机制-以太网MAC机制
  • [2025]基于微信小程序慢性呼吸系统疾病的健康管理(源码+文档+解答)
  • 预处理、makefile、静动态库编写、nfs挂载、快捷命令
  • 白酒与朋友聚餐:如何活跃气氛,增进感情?
  • 每日OJ题_牛客_除2!(贪心+堆)
  • 2024.9.19
  • 【C++算法】模拟算法
  • 【MySQL】表的相关操作
  • linux网络编程3
  • 项目实现:云备份服务端①(文件操作、Json等工具类实现)
  • 建设工程联合体的性质如何认定?
  • 【机器学习】经典数据集鸢尾花的分类识别
  • Yocto - 使用Yocto开发嵌入式Linux系统_01 前言