栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ModuleList和Sequential在Pytorch中的区别

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ModuleList和Sequential在Pytorch中的区别

ModuleList和Sequential在Pytorch中的区别 一、分别简述 1、nn.Sequential

它里面的模块是按照顺序进行排列的,所以需要保证前一个模块的输出大小和下一个模块的输入大小一致。

2、nn.ModuleList

它是一个容器,可以储存不同的module,并将每个module添加到网络之中。类比认识的话,他就像是Python中常用到的list一样,就是一些放入和移除的操作。【特别注意:nn.ModuleList可以将module的所有Parameters放入网络之中】

class net_modlist(nn.Module):
    def __init__(self):
        super(net_modlist, self).__init__()
        self.modList = nn.ModuleList([
                       nn.Conv2d(1, 20, 5),
                       nn.ReLU(),
                       nn.Conv2d(20, 64, 5),
                       nn.ReLU()
                        ])
    def forward(self, x):
        for m in self.modList:
            x = m(x)
        return x

net_modList = net_modlLst()
print(net_modList)
二、两者区别

1、nn.Sequential不需要写forward()函数,而nn.ModuleList的内部没有实现forward()函数,故需要使用forward()函数对其进行调用。
【大体情况下:我们常使用nn.Sequential组成卷积块(block),然后像积木拼接一样把不同的block组建成一个网络】

2、nn.Sequential里面的模块按照顺序进行排列的,所以必须确保前一个模块的输出大小和下一个模块的输入大小是一致的。而nn.ModuleList 并没有定义一个网络,它只是将不同的模块储存在一起,这些模块之间并没有什么先后顺序可言。

3、网络中可能存在一些重复或相似的网络层,我们不会选择一行一行的去构建,而是使用for循环网络进行动态构建。那么,此时使用nn.ModuleList就更为方便了。

class net4(nn.Module):
    def __init__(self):
        super(net4, self).__init__()
        layers = [nn.Linear(10, 10) for i in range(5)]
        self.linears = nn.ModuleList(layers)

    def forward(self, x):
        for layer in self.linears:
            x = layer(x)
        return x

net = net4()
print(net)

参考链接:
(1)链接1
(2)链接2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号