赞
踩
1. torch.nn torch.nn 是 PyTorch 深度学习框架中的一个核心模块,它为构建和训练神经网络提供了丰富的类库。

以下是 torch.nn 的关键组成部分及其功能:
nn.Module 类:
nn.Module 是所有自定义神经网络模型的基类。用户通常会从这个类派生自己的模型类,并在其中定义网络层结构(如卷积层、全连接层等)以及前向传播函数(forward pass):nn.Module 是所有自定义神经网络结构的基础类。当你需要创建一个深度学习模型时,通常会继承这个类,并在其中定义模型的层(Layer)结构以及前向传播(forward pass)逻辑。在子类中通过调用 super().__init__() 初始化父类,并定义各种层作为实例变量,如卷积层(nn.Conv2d)、全连接层(nn.Linear)、激活函数等。必须实现 forward(self, input) 方法,该方法描述了输入数据如何经过网络中的各个层并生成输出。 详细内容请见PyTorch的nn.Module类的详细介绍。预定义层(Modules):
包括各种类型的层组件,例如:nn.BatchNorm1d, nn.BatchNorm2d 等。nn.MaxPool1d, nn.MaxPool2d, nn.AvgPool2d 用于下采样特征图。nn.ReLU, nn.Sigmoid, nn.Tanh 等非线性激活层。nn.Conv1d, nn.Conv2d, nn.Conv3d 分别用于一维、二维和三维数据的卷积操作,常应用于图像识别、语音处理等领域。nn.Linear 用于实现线性变换,常见于多层感知机(MLP)中。容器类:
nn.Sequential:允许将多个层按顺序组合起来,形成简单的线性堆叠网络。nn.ModuleList 和 nn.ModuleDict:可以动态地存储和访问子模块,支持可变长度或命名的模块集合。损失函数(Loss Functions):
torch.nn 包含了一系列用于衡量模型预测与真实标签之间差异的损失函数,例如:
nn.NLLLoss 配合LogSoftmax层使用于分类任务。nn.MSELoss 适用于回归任务。nn.CrossEntropyLoss 常用于分类任务。nn.BCEWithLogitsLoss 用于二元分类任务。实用函数接口(Functional Interface):nn.functional(通常简写为 F),包含了许多可以直接作用于张量上的函数,它们实现了与层对象相同的功能,但不具有参数保存和更新的能力。比如,可以使用 F.relu() 直接进行 ReLU 操作,或者 F.conv2d() 进行卷积操作。
初始化方法:
torch.nn.init 提供了一些常用的权重初始化策略,比如 Xavier 初始化 (nn.init.xavier_uniform_()) 和 Kaiming 初始化 (nn.init.kaiming_uniform_()), 这些对于成功训练神经网络至关重要。通过 torch.nn,开发者能够快速构建复杂的深度学习模型,并利用 PyTorch 动态计算图特性进行高效训练和推理。此外,该模块还与 torch.optim 配合,方便地进行权重优化;以及与 DataLoader 结合以组织和迭代训练数据。
torch.nn 的使用方法使用方法通常包括以下步骤:
nn.Module 类创建自定义模型,并在构造函数 __init__() 中定义需要的层结构。forward(self, input) 方法,描述如何通过定义好的层计算输出。torch.optim) 对模型的可学习参数进行优化,结合数据加载器 (torch.utils.data.DataLoader) 加载数据集,并在一个循环中迭代执行前向传播、计算损失、反向传播和参数更新。Python
- 1import torch
- 2import torch.nn as nn
- 3
- 4# 定义一个简单的全连接神经网络模型
- 5class SimpleNet(nn.Module):
- 6 def __init__(self, input_size, hidden_size, num_classes):
- 7 super(SimpleNet, self).__init__()
- 8 self.fc1 = nn.Linear(input_size, hidden_size)
- 9 self.relu = nn.ReLU()
- 10 self.fc2 = nn.Linear(hidden_size, num_classes)
- 11
- 12 def forward(self, x):
- 13 out = self.fc1(x)
- 14 out = self.relu(out)
- 15 out = self.fc2(out)
- 16 return out
- 17
- 18# 创建模型实例
- 19model = SimpleNet(input_size=784, hidden_size=128, num_classes=10)
- 20
- 21# 定义损失函数和优化器
- 22criterion = nn.CrossEntropyLoss()
- 23optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
- 24
- 25# 假设我们有一个数据批次
- 26inputs = torch.randn(64, 784) # 输入张量
- 27labels = torch.randint(0, 10, (64,)) # 标签张量
- 28
- 29# 正向传播计算预测结果
- 30outputs = model(inputs)
- 31
- 32# 计算损失
- 33loss = criterion(outputs, labels)
- 34
- 35# 反向传播和参数更新
- 36optimizer.zero_grad() # 清零梯度缓冲区
- 37loss.backward() # 反向传播求梯度
- 38optimizer.step() # 更新模型参数

以上是一个简单的例子展示了如何定义模型、损失函数和优化器,并进行一次训练迭代的过程。在实际应用中,还需要根据具体问题设计更复杂的网络结构和训练流程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。