nn.Sequential

在PyTorch中,nn.Sequential是一个容器模块,它按照它们在构造函数中传递的顺序包含一系列的子模块。nn.Sequential使得模型的构建更加简洁和直观,特别是当你的模型由一系列层顺序堆叠而成时。

功能

nn.Sequential自动将输入数据通过其包含的子模块进行传递。这意味着你不需要显式地编写前向传播逻辑,只需要定义模型的层次结构即可。

使用方法

你可以通过两种方式使用nn.Sequential
  1. 直接在构造函数中定义子模块: 你可以在创建nn.Sequential实例时,直接在构造函数中按顺序传递子模块。
Python复制
import torch.nn as nn

model = nn.Sequential(
    nn.Linear(10, 5),
    nn.ReLU(),
    nn.Linear(5, 2)
)
  1. 动态添加子模块: 你也可以在创建nn.Sequential实例后,动态地添加子模块。
Python复制
model = nn.Sequential()
model.add_module("linear1", nn.Linear(10, 5))
model.add_module("relu1", nn.ReLU())
model.add_module("linear2", nn.Linear(5, 2))

示例

下面是一个使用nn.Sequential构建简单神经网络的示例:
Python复制
import torch
import torch.nn as nn

# 创建一个nn.Sequential实例
model = nn.Sequential(
    nn.Linear(5, 3),  # 将5维输入映射到3维输出
    nn.ReLU(),        # 应用ReLU激活函数
    nn.Linear(3, 2)   # 将3维输入映射到2维输出
)

# 创建一个随机生成的输入向量(批次大小为1,5个特征)
input_vector = torch.randn(1, 5)

# 前向传播
output_vector = model(input_vector)

print("输入向量:", input_vector)
print("输出向量:", output_vector)
在这个示例中,我们创建了一个包含两个线性层和一个ReLU激活层的顺序模型。输入向量首先通过第一个线性层,然后通过ReLU激活层,最后通过第二个线性层,得到输出向量。

优点

  1. 代码简洁:nn.Sequential使得模型的构建更加简洁和直观,特别是对于顺序堆叠的层。
  2. 易于理解:模型的结构清晰明了,易于理解和维护。
  3. 灵活性:虽然nn.Sequential主要用于顺序堆叠的层,但它也可以与其他容器模块(如nn.ModuleListnn.ModuleDict等)一起使用,以构建更复杂的模型。
nn.Sequential是PyTorch中构建顺序模型的便捷工具,它简化了模型的构建过程,使得代码更加简洁和易于理解。
posted @ 2025-03-14 01:06  yinghualeihenmei  阅读(194)  评论(0)    收藏  举报