关于网络的parameters
Pytorch中,每一个网络继承于nn.Module
类,当实例化之后,是通过维护一下8个字典来实现各种网络功能的:
1 | _parameters |
在网络初始化__init__
过程中,所有类内变量的定义都会通过__setattr__
方法在__dict__
中进行注册,而nn.Module
重写了注册方法,将所有类内变量中,类型派生于Parameter
的变量归属到_parameters
字典中,这就解释了为什么使用一个list
来存放网络的每一层会导致网络中的parameters
为空。
此外,在获取参数时,nn.Module
是通过遍历整个_modules
字典来实现的,因此在定义时可以使用nn.ModuleList
类型来替代list
类型存放多个网络层。
Reference
[1]Gemfield, “详解Pytorch中的网络构造,” 知乎专栏, Jan. 04, 2019. https://zhuanlan.zhihu.com/p/53927068 (accessed Sep. 26, 2022).