• pytorch 中 nn.ModuleList()使用说明


    nn.ModuleList() 是 PyTorch 中的一个类,用于管理神经网络模型中的子模块列表。它允许将多个子模块组织在一起,并将它们作为整个模型的一部分进行管理和操作。

    神经网络模型的开发过程中,通常需要定义和使用多个子模块,例如不同的层、块或者其他组件。nn.ModuleList() 提供了一种方便的方式来管理这些子模块,并确保它们被正确地注册为模型的一部分。

    使用 nn.ModuleList() 需要进行两个步骤:

    在模型的 __init__ 方法中,定义一个 nn.ModuleList 实例,并将需要管理的子模块添加到该列表中。
    在模型的 forward 方法中,使用 nn.ModuleList 实例来访问和操作子模块。

    1. import torch
    2. import torch.nn as nn
    3. class MyModel(nn.Module):
    4. def __init__(self):
    5. super(MyModel, self).__init__()
    6. self.module_list = nn.ModuleList([
    7. nn.Linear(3, 4),
    8. nn.ReLU(),
    9. nn.Linear(4, 3),
    10. ])
    11. def forward(self, x):
    12. for module in self.module_list:
    13. x = module(x)
    14. print(x)
    15. return x
    16. model = MyModel()
    17. input_tensor = torch.randn(5, 3)
    18. output_tensor = model(input_tensor)
    19. 输出:
    20. tensor([[ 0.4509, 0.3470, -0.0216, -0.5590],
    21. [-0.4539, 0.3508, 0.8228, -0.2100],
    22. [ 0.6888, 0.1177, -0.6534, -0.8283],
    23. [-1.3217, 0.5313, 2.0204, 0.4374],
    24. [ 0.3079, 0.5607, 0.3941, -0.5886]], grad_fn=)
    25. tensor([[0.4509, 0.3470, 0.0000, 0.0000],
    26. [0.0000, 0.3508, 0.8228, 0.0000],
    27. [0.6888, 0.1177, 0.0000, 0.0000],
    28. [0.0000, 0.5313, 2.0204, 0.4374],
    29. [0.3079, 0.5607, 0.3941, 0.0000]], grad_fn=)
    30. tensor([[-0.2666, 0.0640, 0.2471],
    31. [-0.6055, -0.0951, 0.0608],
    32. [-0.2297, 0.0512, 0.3325],
    33. [-1.4177, -0.6686, -0.4530],
    34. [-0.5100, -0.0886, 0.0436]], grad_fn=)

    在示例中,定义了一个名为 MyModel 的自定义模型类。在该类的 __init__ 方法中,创建了一个 该类nn.ModuleList的实例 module_list,并添加了三个子模块:一个线性层(nn.Linear)、一个 ReLU 激活函数(nn.ReLU)和另一个线性层(这是在初始化类时一次添加的模块),当然还可以调用module_list.append(layername)来添加子模块。这些子模块将作为整个模型的一部分。

    在模型的 forward 方法中,通过迭代 module_list 中的子模块,依次将输入数据 x 传递给它们,并获取最终的输出。

    通过使用 nn.ModuleList,我们可以方便地管理模型中的多个子模块,并确保它们被正确地注册为模型的一部分。这使得模型的结构清晰可见,同时也方便了模型的训练和参数优化。

  • 相关阅读:
    redis之变慢了该如何排查?
    如何通过自签名证书让本地环境变为 https
    【GDAL-java的四个常用代码示例】
    接口与外设数据传送方式(笔记)
    【Nuxt3】Vue3 + Element-plus 打包后报错 @popperjs/core
    115.(leaflet篇)leaflet空间判断-点与矩形的空间关系
    深入理解MySQL数据库(Innodb存储引擎)
    Cassandra 设计最佳实践
    猿创征文|C&C++——内存管理|内存区域划分介绍|内存分布C++内存管理方式|operator new与operator delete函数 |
    STL-reverse_iterator 反向迭代器
  • 原文地址:https://blog.csdn.net/ym62033/article/details/137272352