1. 程式人生 > 其它 >PyTorch建立簡單的邏輯迴歸模型(LogisticRegression)

PyTorch建立簡單的邏輯迴歸模型(LogisticRegression)

import torch
import torch.nn.functional as F  # 從torch引入啟用函式

x_data = torch.tensor([[1.0], [2.0], [3.0]]).cuda()  # 將資料放在GPU上
y_data = torch.tensor([[0.0], [0.0], [1.0]]).cuda()


class LogisticRegressionModel(torch.nn.Module):  # 繼承torch.nn.Module
    def __init__(self):  # 初始化類
        super(LogisticRegressionModel, self).__init__()  # 繼承父類
        self.linear = torch.nn.Linear(1, 1)  # 建立線性層

    def forward(self, x):  # 定義正向傳播
        y_pred = F.sigmoid(self.linear(x))  # 將線性層輸出的結果經過sigmoid啟用函式
        return y_pred


model = LogisticRegressionModel().cuda()  # 例項化物件為model然後將model的計算圖放在GPU上
criterion = torch.nn.BCELoss(size_average=False).cuda()  # 建立損失函式,BCELoss為二分類的損失函式,並設定size_average=False不平均損失
optimizer = torch.optim.SGD(model.parameters(), lr=1e-2)  # 建立優化器SGD來優化model的parameters,並設定learning_rate=1e-2
for epoch in range(100):  # 進行100輪訓練
    y_pred = model(x_data)  # 通過model的正向傳播得到y_pred
    loss = criterion(y_pred, y_data)  # 將預測值與真實值進行計算損失函式
    print(epoch + 1, loss.item())  # 輸出輪數和損失函式
    optimizer.zero_grad()  # 進行反向傳播前將梯度置0
    loss.backward()  # 損失函式進行反向傳播來計算梯度
    optimizer.step()  # 根據計算的梯度來更新引數權重
print(model(torch.tensor([[4.0]]).cuda()))  # 使用模型來預測值

執行結果