torch.nn.ModuleList()

torch.nn.ModuleList()

与Module, ModuleDict, Sequential同属于容器

和通常的python list一样进行append, extend, insert操作,但是参数会自动注册

示例

'''from PYTORCH DOCUMENTATION'''
class MyModule(nn.Module):
    def __init__(self):
        super(MyModule, self).__init__()
        self.linears = nn.ModuleList([nn.Linear(10, 10) for i in range(3)])

    def forward(self, x):
        # ModuleList can act as an iterable, or be indexed using ints
        for i, l in enumerate(self.linears):
            x = self.linears[i // 2](x) + l(x)
        return x

和List的区别

list需要手动注册参数, 如果不注册不会打印出任何结果

import torch
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.linears = [nn.Linear(4,4), nn.Linear(4,4), nn.Linear(4, 4)]
        #self.linears = nn.ModuleList[nn.Linear(4,4), nn.Linear(4,4), nn.Linear(4, 4)]
        #self.linears = nn.ModuleList([nn.Linear(4,4) for i in range(3)]) 
        '''手动注册参数'''
        for i, layer in enumerate(self.linears):
            layer.weight = nn.Parameter(torch.rand(4, 4))
            self.register_parameter('weight'+str(i), layer.weight)
    def forward(self, x):
        for linear in self.linears:
            x = linear(x)
            x = F.relu(x)
        return x

net = Net()
for parameter in net.parameters():
                print(parameter)

和Sequential的区别

ModuleList中的模块顺序与实际网络中数据流动的顺序无关,取决于forward中的定义
参考PyTorch 中的 ModuleList 和 Sequential: 区别和使用场景 - 知乎 (zhihu.com)

Related Links

nn.Sequential与nn.ModuleList-CSDN博客

torch.nn — PyTorch master documentation

PyTorch之Container深度理解 - 知乎 (zhihu.com)

Pytorch参数注册和nn.ModuleList nn.ModuleDict的问题_python_脚本之家 (jb51.net)
register_parameter和register_buffer 详解-CSDN博客

PyTorch 中的 ModuleList 和 Sequential: 区别和使用场景 - 知乎 (zhihu.com)

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值