【小白笔记】PyTorch 中进行深度学习建模最核心的两个部分:nn 模块和 utils 模块

部署运行你感兴趣的模型镜像

🔬 from torch import nn 中的 nn 是什么?

在 PyTorch 代码中,这行代码:

from torch import nn

引入的 nnNeural Networks(神经网络)的缩写。

1. 英文释义和词源来历

  • nn:是 Neural Networks 的简写。
    • Neural:英文含义是“神经的”。
    • Network:英文含义是“网络”。
    • 词源来历: Neural 来自希腊语 neuron,意为“肌腱”或“神经”。在人工智能领域,Neural Network(神经网络)是一套模仿生物神经元结构和功能的数学模型,用于学习复杂的模式。

2. torch.nn 的核心功能

torch.nn 模块是 PyTorch 的核心模块,它提供了构建和训练神经网络所需的所有基本结构和功能

  • 层 (Layers) 结构: 提供了各种标准和先进的神经网络层,例如:
    • nn.Linear: 全连接层(线性变换)。
    • nn.Conv2d: 二维卷积层(用于图像)。
    • nn.ReLU, nn.Sigmoid: 激活函数。
    • nn.MaxPool2d: 池化层。
  • 容器 (Containers): 用于组织层的结构,例如:
    • nn.Module: 这是所有神经网络模块(包括层和整个模型)的基类。您定义的每一个 PyTorch 模型都必须继承自它。
    • nn.Sequential: 可以按顺序堆叠层的容器。

在 PyTorch 的 nn 模块中,容器 (Containers) 并不是指我们日常编程中的那种数据容器(如列表、字典),而是指用于组织和管理其他神经网络层或模块的特殊模块

它们的本质是:继承自 nn.Module 的类,其主要工作不是进行具体的张量计算,而是构建计算图的层次结构。


🏗️ nn 模块中容器的具体含义

在 PyTorch 中,最核心的两个“容器”是:

1. nn.Module (所有模块的基石)

这是 PyTorch 中所有层和容器的“祖宗”。

  • 地位: 任何一个神经网络组件,无论是简单的卷积层 (nn.Conv2d)、激活函数,还是您自己定义的整个复杂模型,都必须继承自 nn.Module
  • 核心功能:
    1. 管理参数 (Parameters): 自动跟踪所有可训练的权重和偏置。
    2. 管理子模块 (Submodules): 自动识别和跟踪您在模型中使用的其他 nn.Module 实例(即其他层或容器)。
    3. 提供计算方法 (forward): 要求子类必须实现 forward 方法,定义数据如何流过这个模块。
    4. 状态管理: 提供了保存和加载整个模块状态(权重)的方法(如 state_dict())。

精髓: nn.Module 是一个智能的管理器,它让 PyTorch 知道哪些张量需要计算梯度,哪些是模型的一部分,从而实现自动微分训练

2. nn.Sequential (最直接的容器)

nn.Sequential 是一种特殊的容器,用于将一系列模块按顺序连接起来。

  • 作用: 它将一个列表或一组参数化的模块,组合成一个新的、更大的模块。数据会按传入的顺序依次流经每个子模块。
  • 优点:
    • 简洁性: 当您搭建一个数据流向非常简单的“线性”网络时,它可以让代码极其简洁,无需手动编写复杂的 forward 函数。
  • 示例 (伪代码):
    model = nn.Sequential(
        nn.Linear(784, 128),  # 第一层
        nn.ReLU(),           # 激活函数
        nn.Linear(128, 10)   # 第二层
    )
    # 当您调用 model(x) 时,数据 x 会依次通过这三个模块。
    

3. nn.ModuleListnn.ParameterList (用于灵活管理)

这两者是为更复杂的模型结构设计的辅助容器:

  • nn.ModuleList

    • 作用: 像 Python 列表一样,但专门用于存储一组子模块
    • 关键点: 它能确保 PyTorch 的 nn.Module 机制正确地注册这些子模块的参数,使它们在训练时能被优化器找到并更新。
    • 应用场景: 当您需要在一个循环中创建多层(例如,在一个 ResNet 块中重复使用相同的结构)时,nn.ModuleList 非常有用。
  • nn.ParameterList

    • 作用: 类似地,它是一个专门用于存储一组可训练参数的列表。

💡 容器的精髓总结

容器在 PyTorch 中不是为了存储数据,而是为了实现结构化和自动化管理

  1. 结构化 (Structure): 它们允许您将复杂的模型分解成更小、更清晰的逻辑单元。
  2. 自动化 (Automation): 它们自动处理参数的注册和管理,让您不必担心梯度计算时会遗漏任何权重。

理解了这些容器,特别是 nn.Module 的作用,您就理解了 PyTorch 搭建神经网络的核心机制

  • 损失函数 (Loss Functions): 用于衡量模型预测与真实标签之间差异的函数,例如:
    • nn.CrossEntropyLoss: 交叉熵损失(常用于分类任务)。
    • nn.MSELoss: 均方误差损失(常用于回归任务)。

简而言之: torch.nn 就是一个积木盒,里面装满了各种神经网络的零件和工具。您用这些零件(层)搭建出您的模型。


🛠️ utils 是什么?

utilsUtilities(实用工具/辅助工具)的缩写。它通常不是直接从 torch 导入,而是存在于 PyTorch 生态系统的各个子库中,比如您在之前问题中提到的 TorchVision

1. 英文释义和词源来历

  • utils:是 Utilities 的简写。
    • Utility:英文含义是“效用、实用性、公共事业”。
    • 词源来历: Utility 来自拉丁语 utilitas,意为“有用的、有益的”。
  • 在编程中,utils 文件夹或模块通常用来存放各种不属于核心功能、但对开发过程非常有帮助辅助函数

2. PyTorch 生态中 utils 的常见位置和功能

utils 模块主要提供数据处理、模型管理、或特定任务辅助的功能。最著名的例子在 torch.utils.data 中:

模块位置主要功能作用描述
torch.utils.data.Dataset数据集抽象类定义如何访问单个数据样本及其标签。
torch.utils.data.DataLoader数据加载器负责将数据集中的样本按批次 (Batch) 加载,并提供并行处理、打乱数据等功能,以高效地喂给模型进行训练。
torch.utils.tensorboard可视化工具提供与 TensorBoard 等工具的集成接口,用于监控训练过程。
torchvision.utils视觉辅助工具例如,提供 make_grid 函数,用于将多张图片拼接成网格进行可视化。

简而言之: utils 模块提供了高效处理数据、加载数据、以及进行训练辅助操作的工具,它们是保障模型能够顺利、高效运行的基础设施

您可能感兴趣的与本文相关的镜像

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值