1、Sequential 简介

Sequential表示一个连续的容器,模块将按照它们在构造函数中传递的顺序添加到容器其中。

Sequential的forward()方法接受任何输入并将其转发到它包含的第一个模块。然后,它将输出顺序“链接”到每个后续模块的输入,最终返回最后一个模块的输出。

Sequential提供的优于手动调用模块序列的价值在于,它允许将整个容器视为单个模块,这样对Sequential执行转换将应用于它存储的每个模块。

2、Sequential 和 ModuleList 的区别

Sequential和torch.nn.ModuleList有什么区别呢?Sequential中的层以级联方式连接,而ModuleList仅仅是存储模块,并没有级联,这是两者的区别所在。

3、Sequential 代码应用

使用Sequential可以构建一个短小灵活的网络模型,如下所示。当模型运行的时候,数据首先经过Conv2d(1,20,5)层的处理,然后再进入第一个ReLU层,随着进入nn.Conv2d(20,64,5)层,最后经过第2个ReLU层。

model = nn.Sequential(
          nn.Conv2d(1,20,5),
          nn.ReLU(),
          nn.Conv2d(20,64,5),
          nn.ReLU()
        )

当然,我们可以使用OrderedDict当做Sequential的参数,下面的代码与上述例子完全等效:

model = nn.Sequential(OrderedDict([
          ('conv1', nn.Conv2d(1,20,5)),
          ('relu1', nn.ReLU()),
          ('conv2', nn.Conv2d(20,64,5)),
          ('relu2', nn.ReLU())
        ]))