zoukankan      html  css  js  c++  java
  • nn.mudlelist()说明--未上传

    nn.modulelist()

    如果在构造函数__init__中用到list、tuple、dict等对象时,一定要思考是否应该用ModuleList或ParameterList代替。如果你想设计一个神经网络的层数作为输入传递。

    1. class MyModule(nn.Module): 
    2. def __init__(self): 
    3. super(MyModule, self).__init__() 
    4. self.linears = nn.ModuleList([nn.Linear(10, 10) for i in range(10)]) 
    5.  
    6. def forward(self, x): 
    7. # ModuleList can act as an iterable, or be indexed using ints 
    8. for i, l in enumerate(self.linears): 
    9. x = self.linears[i // 2](x) + l(x) 
    10.  
    11. return x 

    1. extend和append方法

    nn.moduleList定义对象后,有extend和append方法,用法和python中一样,extend是添加另一个modulelist  append是添加另一个module

    2.和普通list的区别

    和普通list不一样,它和torch的其他机制结合紧密,继承了nn.Module的网络模型class可以使用nn.ModuleList并识别其中的parameters,当然这只是个list,不会自动实现forward方法。

    可见,普通list中的子module并不能被主module所识别,而ModuleList中的子module能够被主module所识别。这意味着如果用list保存子module,将无法调整其参数,因其未加入到主module的参数中。

          除ModuleList之外还有ParameterList,其是一个可以包含多个parameter的类list对象。在实际应用中,使用方式与ModuleList类似。

    nn.Sequential定义的网络中各层会按照定义的顺序进行级联,因此需要保证各层的输入和输出之间要衔接。并且nn.Sequential实现了farward()方法,因此可以直接通过类似于x=self.combine(x)的方式实现forward。而nn.ModuleList则没有顺序性要求,并且也没有实现forward()方法。这是二者之间的区别。

  • 相关阅读:
    C#接口入门学习
    消息队列接收时报错:对消息队列系统的访问被拒绝
    给某做测试的好友的建议
    在不同的Sql Server 数据库服务器(不同机器)导数据。
    如何让开发人员更好测试?
    存储过程初探
    语音报警.NET开发初探
    vs2010下Siverlight开发环境安装
    C# HttpWebRequest 从google服务器获取google的PageRank PR值
    创建进程API CreateProcess Demo
  • 原文地址:https://www.cnblogs.com/miaozhijuan/p/12454189.html
Copyright © 2011-2022 走看看