天天看點

Pytorch深度學習(六):多元特征的輸入

多元特征的輸入

    • 一、概念
    • 二、完整實作代碼:

一、概念

我們來看看多元輸入(Multiple Dimension Input),我們先看看多元Logistic回歸模型:

Pytorch深度學習(六):多元特征的輸入

假設我們有一個8維的輸入,于是就可以改變我們的Logistic回歸模型。

Pytorch深度學習(六):多元特征的輸入

運用相關矩陣的知識我們便可以分析出Z矩陣的相關次元,并且b矩陣可以運用廣播機制來參與相關的運算。

下面是對糖尿病病人的病情進行預測,預測未來是否會加重。

輸入有8個名額,也就是8個次元,輸出隻有一個次元即是否加重病情。

次元的變化其實就是線性代數中矩陣乘法的作用:[m×n]⋅[n×k]=[m×k][m×n]⋅[n×k]=[m×k]

二、完整實作代碼:

import numpy as np
import torch
#1.準備資料集
xy = np.loadtxt('diabetes.csv.gz',delimiter=',',dtype=np.float32)
#xy = np.loadtxt('diabetes.csv',delimiter=',',dtype=np.float32)

'''
torch.from_numpy()方法把數組轉換成張量,且二者共享記憶體,
對張量進行修改比如重新指派,那麼原始數組也會相應發生改變。
'''
x_data = torch.from_numpy(xy[:,:-1])  #x_data除了最後一列不取
y_data = torch.from_numpy(xy[:,[-1]]) # y_data是最後1列


#2.建構網絡模型class
class Model(torch.nn.Module):
    #初始化
    def __init__(self):
        super(Model,self).__init__()  #這是對繼承自父類的屬性進行初始化。而且是用父類的初始化方法來初始化繼承的屬性。也就是說,子類繼承了父類的所有屬性和方法,父類屬性自然會用父類方法來進行初始化。
        self.linear1 = torch.nn.Linear(8,6)
        self.linear2 = torch.nn.Linear(6,4)
        self.linear3 = torch.nn.Linear(4,1)
        self.sigmoid = torch.nn.Sigmoid()
        
    def forward(self,x):
        x = self.sigmoid(self.linear1(x))
        x = self.sigmoid(self.linear2(x))
        x = self.sigmoid(self.linear3(x))
        return x
model = Model()

#3.構造損失函數和優化器
criterion = torch.nn.BCELoss(size_average=True)  #還是二分類的,繼續用BCELoss
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)

#4.訓練
for epoch in range(100):
    #Forward
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch,loss.item())
    
    #Backward()
    optimizer.zero_grad()
    loss.backward()
    
    #Update
    optimizer.step()
           

參考連結:https://blog.csdn.net/qq_45866407/article/details/108112533

https://www.bilibili.com/video/BV1Y7411d7Ys?p=7

繼續閱讀