PyTorch建立簡單的邏輯迴歸模型(LogisticRegression)
阿新 • • 發佈:2021-09-06
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())) # 使用模型來預測值
執行結果