在深度学习中,有时候创建模型总是要先创建一个class(类),而在初始化类的时候__init__的第一个参数是self,那么这个self有什么作用呢?
对于一个类来说,在创建实例的时候,如果需要添加比较多的参数,那么self的作用就展现出来了,例如,在构建一个生成模型时,在定义init方法的时候,可以将输入噪声的维度、卷积维度以及输出的size等属性添加进去,如下所示:
class Generator(nn.Module):
def __init__(self, noise_dim=100, cov_dim=32, output_size=64):
super(Generator, self).__init__()
请注意,在创建init方法的时候,其第一个参数一定是self,这表明init创建的是实例本身,后面我们自己创建的属性是可以通过self来调用的。
但是当你自己添加了参数时,在进行实例化的时候,就不能传入空参数了,需要和你自己定义的相匹配,自己定义了多少参数,就在实例化时传入多少参数,但是self不需要传入,因为python解释器会自己把实例参数添加进去。实例化如下所示,和上面的是相对应的。
G = generator(noise_dim = 100, g_img_size=64)
其实,在类中定义方法,除了第一个参数是self之外,和平常定义一个普通方法没什么太大区别。