(基於Pytorch的深度學習)筆記1:建立模型用到的類:_init_和self、super(Model, self).__init__()

maoni99999發表於2020-10-02

 

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,那麼,其就可以呼叫以下函式來通過初始化父類屬性以達到初始化自身繼承了父類的某些屬性;這樣一來,作為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_featrue這個位置,返回y,見到你理解y此時就是代表一個nn.Linear(n_featrue,1)這樣的線性迴歸的神經網路模型

呼叫方式:

net = LinearNet(2)

對LinearNet例項化一個物件net,輸入引數為整形資料2,即代表net為一個2輸入1輸出的網路模型;

以上就相當於搭建了一個簡易模型,有點為繁瑣,所以nn類提供了更加簡單的方法來搭建網路

待更新

相關文章