首頁 > 軟體

PyTorch實現多維度特徵輸入邏輯迴歸

2022-03-09 10:00:26

一、實現過程

1、準備資料

本文資料採取文獻[1]給出的資料集,該資料集前8列為特徵,最後1列為標籤(0/1)。本模型使用pandas處理該資料集,需要注意的是,原始資料集沒有特徵名稱,需要自己在第一行新增上去,否則,pandas會把第一行的資料當成特徵名稱處理,從而影響最後的分類效果。

程式碼如下:

# 1、準備資料
import torch
import pandas as pd
import numpy as np
xy = pd.read_csv('G:/datasets/diabetes/diabetes.csv',dtype=np.float32)    # 檔案路徑
x_data = torch.from_numpy(xy.values[:,:-1])
y_data = torch.from_numpy(xy.values[:,[-1]])

2、設計模型

本文采取文獻[1]的思路,啟用函數使用ReLU,最後一層使用Sigmoid函數,

程式碼如下:

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.activate = torch.nn.ReLU()
    
    def forward(self, x):
        x = self.activate(self.linear1(x))
        x = self.activate(self.linear2(x))
        x = torch.sigmoid(self.linear3(x))
        return x
model = Model()

將模型和資料載入到GPU上,程式碼如下:

### 將模型和訓練資料載入到GPU上
# 模型載入到GPU上
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)
# 資料載入到GPU上
x = x_data.to(device)
y = y_data.to(device)
3、構造損失函數和優化器
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)

4、訓練過程

epoch_list = []
loss_list = []
epochs = 10000
for epoch in range(epochs):
    # Forward
    y_pred = model(x)
    loss = criterion(y_pred, y)
    print(epoch, loss)

    epoch_list.append(epoch)
    loss_list.append(loss.data.item())

    # Backward
    optimizer.zero_grad()
    loss.backward()

    # Update
    optimizer.step()

5、結果展示

檢視各個層的權重和偏置:

model.linear1.weight,model.linear1.bias
model.linear2.weight,model.linear2.bias
model.linear3.weight,model.linear3.bias

損失值隨迭代次數的變化曲線:

# 繪圖展示
plt.plot(epoch_list,loss_list,'b')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.grid()
plt.show()

最終的損失和準確率:

# 準確率
y_pred_label = torch.where(y_pred.data.cpu() >= 0.5,torch.tensor([1.0]),torch.tensor([0.0]))
acc = torch.eq(y_pred_label, y_data).sum().item()/y_data.size(0)

print("loss = ",loss.item(), "acc = ",acc)

loss =  0.4232381284236908 acc =  0.7931488801054019

二、參考文獻

  • [1] https://www.bilibili.com/video/BV1Y7411d7Ys?p=7
  • [2] https://blog.csdn.net/bit452/article/details/109682078

 到此這篇關於PyTorch實現多維度特徵輸入邏輯迴歸的文章就介紹到這了,更多相關PyTorch邏輯迴歸內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com