• 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()方法。这是二者之间的区别。

  • 相关阅读:
    TCP并发服务器(一)——每个客户一个子进程
    TCP并发服务器(六)——创建线程池,每个线程accept,accept使用互斥锁保护——基于UNP代码
    TCP并发服务器(七)——可动态增减的线程池,主线程accept——基于UNP代码修改
    STL源码之vector
    coffee-script安装
    Python模块包中__init__.py文件的作用
    原型模式
    facade模式
    类继承模式
    备忘模式
  • 原文地址:https://www.cnblogs.com/miaozhijuan/p/12454189.html
Copyright © 2020-2023  润新知