文章目录
- 介绍
- 基本用法
- 添加命名层
- 动态添加层
- 嵌套使用
- 与自定义前向传播的区别
介绍
torch.nn.Sequential 是 PyTorch 中的一个容器模块,用于将多个神经网络层按顺序组合在一起。它可以让我们以更加简洁的方式定义前向传播的网络结构,适合简单的线性堆叠模型。
基本用法
torch.nn.Sequential 按照定义的顺序将多个层组合在一起,输入数据会依次通过这些层。
python">import torch.nn as nn # 定义一个简单的网络
model = nn.Sequential( nn.Linear(10, 20), # 全连接层:输入 10,输出 20 nn.ReLU(), # 激活函数:ReLU nn.Linear(20, 1) # 全连接层:输入 20,输出 1
)
当调用 model(input) 时,输入会依次通过 Sequential 中的每一层。
python">import torch input = torch.randn(5, 10) # 输入:batch_size=5, features=10
output = model(input) # 前向传播
print(output.shape) # 输出:torch.Size([5, 1])
添加命名层
可以为每一层指定名称,方便后续访问或调试。
python">model = nn.Sequential( ('fc1', nn.Linear(10, 20)), # 命名为 'fc1' ('relu1', nn.ReLU()), # 命名为 'relu1' ('fc2', nn.Linear(20, 1)) # 命名为 'fc2'
)
通过名称或索引访问某一层:
python">print(model.fc1) # 访问名为 'fc1' 的层
print(model[0]) # 通过索引访问第一层
动态添加层
可以通过 add_module 方法动态添加层。
python">model = nn.Sequential()
model.add_module('fc1', nn.Linear(10, 20)) # 添加第一层
model.add_module('relu1', nn.ReLU()) # 添加激活函数
model.add_module('fc2', nn.Linear(20, 1)) # 添加第二层
嵌套使用
nn.Sequential 可以嵌套使用,用于构建更复杂的网络。
python">model = nn.Sequential( nn.Sequential( nn.Linear(10, 20), nn.ReLU() ), nn.Sequential( nn.Linear(20, 10), nn.ReLU() ), nn.Linear(10, 1)
)
与自定义前向传播的区别
nn.Sequential 适合简单的线性堆叠模型,但如果需要更复杂的前向传播逻辑(如分支、跳跃连接等),需要继承 nn.Module 并自定义 forward 方法。
使用 nn.Sequential
python">model = nn.Sequential( nn.Linear(10, 20), nn.ReLU(), nn.Linear(20, 1)
)
自定义 forward
python">class CustomModel(nn.Module): def __init__(self): super(CustomModel, self).__init__() self.fc1 = nn.Linear(10, 20) self.fc2 = nn.Linear(20, 1) self.relu = nn.ReLU() def forward(self, x): x = self.fc1(x) x = self.relu(x) x = self.fc2(x) return x model = CustomModel()