class MyModel(nn.Module):def __init__(self):super().__init__() # 调用 nn.Module 的 __init__# 现在 nn.Module 的初始化完成,我们可以添加自定义层self.conv1 = nn.Conv2d(1, 20, 5)self.conv2 = nn.Conv2d(20, 20, 5)
super().__init__()
在这里确实是在显式调用 nn.Module
的构造函数。具体来说:
- 构造函数调用:
- 这行代码调用了
nn.Module
类的__init__
方法。 nn.Module
是您自定义模型类(如MyModel
)的直接父类。
- 这行代码调用了
nn.Module
构造函数的作用:- 初始化参数和缓冲区的存储容器。
- 设置模块的训练模式。
- 初始化子模块的存储结构。
- 设置一些内部标志和属性,用于追踪模块的状态。
- 为什么是 "显式" 调用:
- 在Python中,子类不会自动调用父类的构造函数。
- 通过
super().__init__()
,我们明确地指示Python调用父类的构造函数。
super()
的工作原理:super()
返回一个临时对象,允许我们调用父类的方法。- 在单继承的情况下,它直接指向父类(这里是
nn.Module
)。
- 初始化顺序:
- 首先执行
nn.Module
的__init__
方法。 - 然后执行您自定义类中
__init__
方法的其余部分。
- 首先执行