2,super(Conv2d, lf).__init__什么意思?
第⼀步:
戊戌变法教案super函数⽤于多层继承(multilevel inheritance)的情况,简单来说,就是之继承最近的那个⽗类。
虾面1class A:
2 def __init__(lf):
3 print('Initializing: class A')
4
5 def sub_method(lf, b):
6 print('Printing from class A:', b)
7
8
9class B(A):
10 def __init__(lf):
11 print('Initializing: class B')
沈美娟
12 super().__init__()
13
14 def sub_method(lf, b):秋夕古诗的意思
15 print('Printing from class B:', b)
16 super().sub_method(b + 1)
17
18
19class C(B):
20 def __init__(lf):
21 print('Initializing: class C')
22 super().__init__()
23
24 def sub_method(lf, b):
25 print('Printing from class C:', b)
26 super().sub_method(b + 1)
27
28
29if __name__ == '__main__':
30 c = C()
31 c.sub_method(1)
32
33# Initializing: class C
34# Initializing: class B
35# Initializing: class A
36# Printing from class C: 1
37# Printing from class B: 2
38# Printing from class A: 3
c = C() 创建了⼀个class C的实例,然后可以看到初始化是从C->B->A的。难以忍耐漫画
c.sub_method(1) ⾸先调⽤了C类⾥的sub_method(),输出了1,然后通过super().sub_method(b + 1)调⽤了B类⾥的sub_method()。可以看到C类⾥的super()就是代替了class C(B)⾥的B类
第⼆步:
super(Net, lf).__init__()
Python中的super(Net, lf).__init__()是指⾸先找到Net的⽗类(⽐如是类NNet),然后把类Net的对象lf转换为类NNet的对象,然后“被转换”的类NNet对象调⽤⾃⼰的init函数,其实简单理解就是⼦类
把⽗类的__init__()放到⾃⼰的__init__()当中,这样⼦类就有了⽗类的__init__()的那些东西。
回过头来看看我们的我们最上⾯的代码,Net类继承nn.,super(Net, lf).__init__()就是对继承⾃⽗类nn.Module的属性进⾏初始化。⽽且是⽤nn.Module的初始化⽅法来初始化继承的属性。
1class Net(nn.Module):
2
3 def __init__(lf):
4 super(Net, lf).__init__()
5 # 输⼊图像channel:1;输出channel:6;5x5卷积核
6 lf.conv1 = nn.Conv2d(1, 6, 5)
震动的近义词
7
也就是说,⼦类继承了⽗类的所有属性和⽅法,⽗类属性⾃然会⽤⽗类⽅法来进⾏初始化。
1class Person:
2 def __init__(lf,name,gender):
3 lf.name = name
4 lf.gender = gender
5 def printinfo(lf):
6 print(lf.der)
7
8class Stu(Person):
9 def __init__(lf,name,gender,school):
10 super(Stu, lf).__init__(name,gender) # 使⽤⽗类的初始化⽅法来初始化⼦类
11 lf.school = school
12 def printinfo(lf): # 对⽗类的printinfo⽅法进⾏重写
信息载体13 print(lf.der,lf.school)
14
15if __name__ == '__main__':
16 stu = Stu('djk','man','nwnu')
17 stu.printinfo()
参考链接:
2blog.csdn/dongjinkun/article/details/114575998
3,def _conv_forward()和def forward什么意思?
我们在使⽤Pytorch的时候,模型训练时,不需要调⽤forward这个函数,只需要在实例化⼀个对象中传⼊对应的参数就可以⾃动调⽤forward 函数。这个称之为前向传播。
1 class Module(nn.Module):
2 def __init__(lf):
3 super().__init__()
4 # ......
5
6 def forward(lf, x):
7 # ......
8 return x
只能向前走
9
10
11data = ...... # 输⼊数据
12
13# 实例化⼀个对象
14model = Module()
15
16# 前向传播
17model(data)
18
19# ⽽不是使⽤下⾯的
20# model.forward(data)
但是实际上model(data)是等价于model.forward(data) 4,