(基于Pytorch的深度学习)笔记1:创建模型用到的类:_init_和self、super(Model, self).__init__()

Python 中的_init_和self:

拿以下一段代码作为例子:

class LinearNet(nn.Module):
    def __init__(self,n_feature):
        super(LinearNet, self).__init__()
        self.linear = nn.Linear(n_feature,1)
        def forward(self, x):
            y = self.linear(x)
            return y

定义一个类:class LinearNet(nn.Module),利用__init__()把需要必须绑定的属性强制填写进去,如上面给的n_feature,注意到__init__()的第一个参数永远是self,其表示创建的实例本身,此时我们也可以看到,新建的LinearNet类拥有一个父类,即nn.Module,那么,那么可以调用以下函数(super().__init()__())来通过初始化父类属性以初始化自身继承了父类的那部分属性;这样一来,作为nn.Module的子类(LinearNet)就无需再初始化那一部分属性了,只需初始化新加的元素;

super(Model, self).__init__()

 super(Model, self).__init__():以上是我自己理解,下面是官方解释。

官方解释:其代表对继承的那个父类的属性进行初始化,首先找到LinearNet的父类A,然后把LinearNet的对象self转换为父类A的对象,然后被转换的父类的对象A调用自己的__init__函数。

再次回到上面那段代码,几点说明:首先,类LinearNet调用__init__()初始化一部分继承父类的属性;

其此增加了新的参数n_feature,linear,以及将他初始化;

增加了一个新函数forward(),有一个和输入参数x,此时x就相当于n_feature这个位置,返回y,见到你理解y此时就是代表一个nn.Linear(n_featrue,1)这样的线性回归的神经网络模型

调用方式:

net = LinearNet(2)

对LinearNet实例化一个对象net,输入参数为整形数据2,即代表net为一个2输入1输出的网络模型;

以上就相当于搭建了一个简易模型,有点为繁琐,所以nn类提供了更加简单的方法来搭建网络

待更新

你可能感兴趣的:(Pytorch,python,深度学习)