PyTorch 的 torch.nn 模块是构建神经网络的核心模块,它提供了许多用来构建和训练深度学习模型的工具。你可以通过 PyTorch 官方的 torch.nn 参考手册 来查阅更详细的 API 说明。下面是 torch.nn 中常用类和方法的概述,以及如何使用它们来构建神经网络。

1. torch.nn.Module

torch.nn.Module 是所有神经网络模块的基类。你可以通过继承 torch.nn.Module 来创建自己的神经网络模型。

主要方法:

  • forward():定义网络的前向传播。
  • parameters():返回模型中所有参数的生成器。
  • zero_grad():将模型中的所有梯度归零。

示例:自定义神经网络

import torch
import torch.nn as nn
import torch.optim as optim

class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 128)  # 输入层到隐藏层
        self.fc2 = nn.Linear(128, 10)  # 隐藏层到输出层

    def forward(self, x):
        x = x.view(-1, 28 * 28)  # 展平输入图像
        x = torch.relu(self.fc1(x))  # 激活函数
        x = self.fc2(x)
        return x

# 创建模型实例
model = SimpleNet()

2. 常用层(Layers)

torch.nn 提供了许多常用的神经网络层,你可以在模型中直接使用它们。

2.1 线性层 (Fully Connected Layer)

  • nn.Linear(in_features, out_features):全连接层。
  • 用于连接上一层的所有神经元到当前层的每个神经元。
linear = nn.Linear(128, 64)  # 从 128 个输入神经元到 64 个输出神经元

2.2 卷积层 (Convolutional Layer)

  • nn.Conv2d(in_channels, out_channels, kernel_size):二维卷积层。
  • 适用于图像数据。
conv = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)  # 输入 3 通道(RGB),输出 64 通道,卷积核大小为 3x3

2.3 池化层 (Pooling Layer)

  • nn.MaxPool2d(kernel_size, stride):最大池化层。
  • 用于降低空间维度。
pool = nn.MaxPool2d(kernel_size=2, stride=2)  # 2x2 的池化窗口,步长为 2

2.4 激活函数 (Activation Functions)

  • nn.ReLU():ReLU 激活函数。
  • nn.Sigmoid():Sigmoid 激活函数。
  • nn.Tanh():Tanh 激活函数。
relu = nn.ReLU()

2.5 批归一化 (Batch Normalization)

  • nn.BatchNorm2d(num_features):对卷积层的输出进行批量归一化。
  • num_features 是输入通道数。
batch_norm = nn.BatchNorm2d(64)  # 输入为 64 个通道的特征图

2.6 Dropout 层

  • nn.Dropout(p):随机丢弃一部分神经元,防止过拟合。
  • p 是丢弃的概率。
dropout = nn.Dropout(p=0.5)  # 丢弃概率为 50%

3. 损失函数 (Loss Functions)

PyTorch 提供了许多常用的损失函数来训练模型。

3.1 交叉熵损失 (Cross Entropy Loss)

  • nn.CrossEntropyLoss():用于多分类任务的损失函数。
  • 计算 softmax 和负对数似然损失。
criterion = nn.CrossEntropyLoss()

3.2 均方误差损失 (Mean Squared Error Loss)

  • nn.MSELoss():用于回归任务的损失函数。
  • 计算输出和目标值之间的均方误差。
criterion = nn.MSELoss()

4. 优化器 (Optimizers)

虽然优化器通常在 torch.optim 中,但它们通常与 torch.nn.Module 结合使用。

4.1 随机梯度下降 (SGD)

  • optim.SGD(params, lr):随机梯度下降优化器。
  • params 是模型参数,lr 是学习率。
optimizer = optim.SGD(model.parameters(), lr=0.01)

4.2 Adam

  • optim.Adam(params, lr):Adam 优化器。
  • 结合了自适应学习率和动量。
optimizer = optim.Adam(model.parameters(), lr=0.001)

5. 模型训练与评估

训练和评估模型的流程通常如下:

# 设置训练模式
model.train()

# 获取输入数据和标签
inputs, labels = next(iter(train_loader))

# 清零梯度
optimizer.zero_grad()

# 前向传播
outputs = model(inputs)

# 计算损失
loss = criterion(outputs, labels)

# 反向传播
loss.backward()

# 更新参数
optimizer.step()

# 评估模型
model.eval()

6. torch.nn 参考手册链接

为了查阅 torch.nn 模块的详细文档,包括所有层、损失函数、优化器和其他工具,推荐访问 PyTorch 官方的 torch.nn 文档

总结

  • torch.nn.Module 是所有神经网络层的基类,用户需要继承该类来构建自定义的神经网络。
  • 常用层:包括 LinearConv2dReLUMaxPool2d 等。
  • 损失函数:包括 CrossEntropyLossMSELoss 等,分别适用于分类和回归任务。
  • 优化器:如 SGDAdam 用于更新模型的参数。
  • 训练与评估:使用 model.train() 和 model.eval() 来切换训练和评估模式。

你可以在 PyTorch 官方文档 查阅完整的 API 参考,了解每个类和函数的详细用法。