• PyTorch - Sequential和ModuleList


    module.py

    Module Class,继承于torch.nn.Module

    • train()函数:train(mode=True),当前self.training=True,所有子模块children,都设置training=True

      • __init__,设置self.training参数,子类会使用training参数

      • Dropout源码,Dropout -> _DropoutNd -> Module、BatchNorm源码,都使用training模式

        • BN: Buffers are only updated if they are to be tracked and we are in training mode.
          
          • 1
      • super(_DropoutNd, self).__init__()

    • eval()函数:train(mode=Fale)

    • requires_grad_():当前模型的所有参数,module的函数,和parameter的函数,参数计算梯度

    • zero_grad():调用优化器的zero_grad(),将所有的参数的梯度都清0,避免梯度累积,优化器设置zero_grad,不需要调用模型

    • __repr__():魔法函数,string的表示,名称+模块描述

    • __dir__():attrs、parameters、modules、buffers、keys,返回所有键值

    module.py,Module Class的源码

    container.py

    • Container已经过期
    • Sequential(Module),有序的,直接传入Module的实例,或传入OrderedDict(),包含键值,最常用
    • 或者传入键值,或者键值为默认idx递增序列
    s = torch.nn.Sequential(torch.nn.Linear(2,3), torch.nn.Linear(3,4))
    s._modules
    OrderedDict([('0', Linear(in_features=2, out_features=3, bias=True)),
                 ('1', Linear(in_features=3, out_features=4, bias=True))])
    
    • 1
    • 2
    • 3
    • 4
    • forward(),input输入module,输出input,循环连续处理input
    • ModuleList(Module),所有子module都放在list中,存放module的列表
    • 将modules添加到ModuleList中,insert或append函数,比list拥有更多的module父类的方法
    • ModuleDict(Module),可以通过key去访问不同的module,本身是一个dict,又是一个module,可以用于module的子module
    • ParameterList(Module),把parameter类型参数放入列表中,mm = matrix multiplication,矩阵乘法
    • ParameterDict(Module),同上
    • Module <-> Parameter,都是container,容器,List和Dict只有存放,没有forward功能,只有Sequential包含forward功能
  • 相关阅读:
    RocketMQ的从节点代理主节点模式
    WorkTool企微机器人接入微信智能问答
    【C++实现】线程池的设计与实现
    无监督特征解耦的变声
    综述拜读:3D Scene Geometry Estimation from 360◦ Imagery
    基于SpringBoot的ElasticSearch操作(超详细教程)
    flink-sql所有数据类型-1.15
    【聚类】DBCAN聚类
    深度学习入门(二) 环境配置与预备知识
    利用ChatGPT进行数据分析并生成数据分析报告
  • 原文地址:https://blog.csdn.net/u012515223/article/details/125600280