Pytorch --- return nn.Sequential(*layers)

例如有如下代码:

def make_features(cfg: list):
    layers = []
    in_channels = 3
    for v in cfg:
        if v == "M":
            layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
        else:
            conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)
            layers += [conv2d, nn.ReLU(True)]
            in_channels = v
    return nn.Sequential(*layers)

layers = [ ] 是一个列表

通过下面的for循环遍历配置列表,可以得到一个由 卷积操作、池化操作等 组成的一个列表layers

return nn.Sequential(*layers),即通过nn.Sequential函数将列表通过非关键字参数的形式传入(列表layers前有一个星号)。

理解非关键字:

ps:看一段官方解释代码:

model = nn.Sequential(
        nn.Conv2d(1,20,5), # 可以看成一个非关键字参数
        nn.ReLU(),
        nn.Conv2d(20,64,5),
        nn.ReLU()
        )

通过将一系列非关键字参数输入到sequencial中,生成一个新的网络结构,这个列表就相当于存放了这个网络结构,且使用的是非关键字形式,所以return nn.Sequential(*layers)。

当然除了关键字还可以用有序的字典方法,如:

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

你可能感兴趣的:(pytorch,python,深度学习,pytorch,神经网络,机器学习)