pytorch入門2.x構建回歸模型系列:
pytorch入門2.0構建回歸模型初體驗(數據生成)
pytorch入門2.1構建回歸模型初體驗(模型構建)
pytorch入門2.2構建回歸模型初體驗(開始訓練)
終於要構建模型啦。這里我們構建的是回歸模型,是用神經網絡構建的,基本結構是什么樣的呢?
你肯定聽說過,神經網絡有輸入層、隱藏層、輸出層,一般結構如下圖所示(圖片來源於網絡,侵刪):
所以,對比我們之前生成的數據來說,形如x=3我們想得到的輸出為y=8。分別對應了上面的輸入層和輸出層,所以,在此我們要構建中間的隱藏層來模擬那個看不見的函數(我們生成數據的函數,假設是未知的,因為如果是已知的,我們直接用這個函數式子來求輸出啦。現在就是利用神經網絡強大的對函數的擬合能力,來模擬這個函數)。
下面就來建立第一個模型吧:
class LinearRegression(nn.Module): # 繼承父類nn.Module,很多額外的、重要的東西就不用寫了,只管自己做的事情就可以(你不是要建立回歸模型么)
def __init__(self):
super(LinearRegression,self).__init__() # 調用父類的初始化函數
# 建立隱藏層,下面是三個隱藏層
self.linear = nn.Linear(1,10) # 輸入是一個數,所以輸出是1,中間建立10個隱藏層節點,此時,你輸出的是10個數
self.linear2 = nn.Linear(10,6,bias=True) # 承接上一層的輸入,10個數,此層在融合成6個數。這里加了個偏置參數。
self.linear3 = nn.Linear(6,1) # 輸出層,承接上面6個數,最終輸出一個數
# 至此網絡的部件定義完畢
# 網絡的部件定義好了,下面開始組裝啦,設置數據如何在網絡中流動,即前向傳播
def forward(self,x): #輸入的是x,就是指前面的輸入層的輸入
# 設置數據流動過程,如果網絡非常復雜,此處要注意輸入數據的維度,經過各層之后得到的數據維度。
x = F.relu(self.linear(x)) #首先經過一個線性層linear,然后經過一個激活函數relu
x = F.relu(self.linear2(x)) #同上
x = self.linear3(x) # 最終經過最后的線性層,得到結果,結果是1維的哦
return x # 返回最后得到的數據
經過上面之后,一個網絡模型就定義完成了,動動腦筋想想我們構建的模型是怎么樣的呢?就是形如上面那張圖的樣子,只是中間的節點數量會變化。
模型定義好了,當然我們用的時候要實例化,我們先實例化一下,打印出來看看模型啥樣?
model = LinearRegression()
print(model)
'''
===output===
LinearRegression(
(linear): Linear(in_features=1, out_features=10, bias=True)
(linear2): Linear(in_features=10, out_features=6, bias=True)
(linear3): Linear(in_features=6, out_features=1, bias=True)
)
'''
可以看到模型的形狀正如我們上面所介紹,網絡模型是有三個線性層,這里把激活函數省略了。
下一節,我們繼續介紹如何使用定義好的網絡模型去做回歸訓練啦。