nn.Sequential的用法
时间: 2023-11-12 13:14:58 浏览: 94
`nn.Sequential`是PyTorch中的一个容器,它可以按照给定的顺序依次执行一系列的神经网络层或模块。
使用`nn.Sequential`可以方便地构建简单的神经网络模型。例如,下面的代码展示了如何使用`nn.Sequential`构建一个包含两个全连接层的简单神经网络:
```python
import torch.nn as nn
model = nn.Sequential(
nn.Linear(10, 20),
nn.ReLU(),
nn.Linear(20, 5),
nn.Softmax(dim=1)
)
```
以上代码中,首先使用`nn.Linear`定义了一个输入维度为10,输出维度为20的全连接层,接着使用`nn.ReLU`定义了一个ReLU激活函数,然后又定义了一个输入维度为20,输出维度为5的全连接层,最后使用`nn.Softmax`定义了一个Softmax层,用于输出概率分布。
在上述的代码中,模型的输入是一个大小为`(batch_size, 10)`的张量,输出是一个大小为`(batch_size, 5)`的概率分布。整个模型的执行顺序是依次执行每一层的前向传播。
需要注意的是,如果某一层需要传入参数,则需要在`nn.Sequential`中使用`nn.ModuleList`进行包装。例如,下面的代码展示了如何使用`nn.Sequential`构建一个包含两个卷积层和一个全连接层的神经网络模型:
```python
import torch.nn as nn
model = nn.Sequential(
nn.Conv2d(3, 16, kernel_size=3),
nn.ReLU(),
nn.Conv2d(16, 32, kernel_size=3),
nn.ReLU(),
nn.Flatten(),
nn.ModuleList([
nn.Linear(32 * 6 * 6, 256),
nn.ReLU(),
nn.Linear(256, 10),
nn.Softmax(dim=1)
])
)
```
在这个例子中,输入的张量是大小为`(batch_size, 3, 28, 28)`的图像,输出的张量是大小为`(batch_size, 10)`的概率分布。在模型中,前两个`nn.Conv2d`层后面都跟着一个`nn.ReLU`层,表示卷积操作之后使用ReLU激活函数。然后使用`nn.Flatten`将卷积层的输出展平成一维向量,接着定义了一个包含两个全连接层的`nn.ModuleList`,最后使用`nn.Softmax`定义了一个Softmax层。其中,在`nn.ModuleList`中定义每个全连接层时都需要使用`nn.Linear`进行定义,因为这些层需要传入参数。
阅读全文