PyTorch库学习之nn.Sequential模块
一、简介
torch.nn.Sequential
是 PyTorch 中用于将多个神经网络层按顺序组合的模块。通过 nn.Sequential
,可以将一系列操作或层按顺序执行,简化模型的定义和构建过程。它特别适用于顺序模型,即输入数据按层逐步传递的神经网络。
二、语法和参数
语法
torch.nn.Sequential(*args)
参数
- *args:一个变长参数列表,可以是任意数量的
nn.Module
实例或OrderedDict
,这些模块将按照传入的顺序进行前向传播。
三、实例
3.1 创建简单的顺序模型
以下示例展示了如何使用 nn.Sequential
创建一个包含两层的简单神经网络模型。
import torch
import torch.nn as nn
# 创建Sequential模型
model = nn.Sequential(
nn.Linear(10, 20),
nn.ReLU(),
nn.Linear(20, 1)
)
# 生成随机输入数据
input_data = torch.randn(5, 10)
# 进行前向传播
output = model(input_data)
print(output)
输出:
tensor([[-0.2040],
[-0.0076],
[ 0.0598],
[-0.0691],
[ 0.1581]], grad_fn=<AddmmBackward0>)
3.2 使用OrderedDict创建顺序模型
还可以使用 OrderedDict
来命名每一层的顺序模型。
import torch
import torch.nn as nn
from collections import OrderedDict
# 使用OrderedDict创建Sequential模型
model = nn.Sequential(OrderedDict([
('fc1', nn.Linear(10, 20)),
('relu1', nn.ReLU()),
('fc2', nn.Linear(20, 1))
]))
# 生成随机输入数据
input_data = torch.randn(5, 10)
# 进行前向传播
output = model(input_data)
print(output)
输出:
tensor([[ 0.2222],
[-0.0663],
[-0.0719],
[ 0.5897],
[ 0.3907]], grad_fn=<AddmmBackward0>)
四、注意事项
nn.Sequential
适用于线性结构的模型。如果需要复杂的网络拓扑结构,可能需要使用子模块或其他模型定义方式。nn.Sequential
中的每个模块都会自动注册为模型的子模块,并会参与参数的优化,因此无需手动添加。- 如果想要命名层或对层进行管理,使用
OrderedDict
会更加直观和清晰。