在PyTorch中,
nn.Sequential
是一个容器模块,它按照它们在构造函数中传递的顺序包含一系列的子模块。nn.Sequential
使得模型的构建更加简洁和直观,特别是当你的模型由一系列层顺序堆叠而成时。功能
nn.Sequential
自动将输入数据通过其包含的子模块进行传递。这意味着你不需要显式地编写前向传播逻辑,只需要定义模型的层次结构即可。使用方法
你可以通过两种方式使用
nn.Sequential
:-
直接在构造函数中定义子模块: 你可以在创建
nn.Sequential
实例时,直接在构造函数中按顺序传递子模块。
Python复制
import torch.nn as nnmodel = nn.Sequential(nn.Linear(10, 5),nn.ReLU(),nn.Linear(5, 2)
)
-
动态添加子模块: 你也可以在创建
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激活层,最后通过第二个线性层,得到输出向量。
优点
-
代码简洁:
nn.Sequential
使得模型的构建更加简洁和直观,特别是对于顺序堆叠的层。 -
易于理解:模型的结构清晰明了,易于理解和维护。
-
灵活性:虽然
nn.Sequential
主要用于顺序堆叠的层,但它也可以与其他容器模块(如nn.ModuleList
、nn.ModuleDict
等)一起使用,以构建更复杂的模型。
nn.Sequential
是PyTorch中构建顺序模型的便捷工具,它简化了模型的构建过程,使得代码更加简洁和易于理解。