簡體   English   中英

Pytorch model 訓練損失沒有改善。 邏輯回歸 model 參數/權重是否未更新?

[英]Pytorch model training loss does not improve. Are the logistic regression model parameters/weights not updating?

我正在嘗試使用以下 model 對圖像進行分類。 訓練損失似乎沒有收斂/改善。 您能否檢查代碼並查看這是否可能是實現邏輯回歸的 model 問題?

我得到的一系列 10 個訓練時期的結果是:

epoch: 1, loss= -16.0369
epoch: 2, loss= -23.3950
epoch: 3, loss= -23.4226
epoch: 4, loss= -18.7254
epoch: 5, loss= -29.8720
epoch: 6, loss= -29.2601
epoch: 7, loss= -21.3710
epoch: 8, loss= -28.2535
epoch: 9, loss= -33.8465
epoch: 10, loss= -27.8332

帶優化器的 Model 代碼:

class LogisticRegression(nn.Module):
    def __init__(self):
        super(LogisticRegression, self).__init__()
        self.linear = [] 
        self.linear.append(nn.Linear(in_features=28*28, out_features=1))
        self.linear = nn.Sequential(*self.linear)
        self.activation = nn.ReLU()
    
    def forward(self, x):
        y = self.activation(torch.sigmoid(self.linear(x)))
        return y

損失和優化器:

learn_rate = 0.01
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(params = LR_model.parameters(), lr=learn_rate)

數據加載器生成“圖像”和“標簽”訓練循環段:

#forward 
        y_predicted = LR_model(images)
        total_loss = criterion(y_predicted, labels.unsqueeze(1))
        #backward
        total_loss.backward()
        #update
        optimizer.step()
        optimizer.zero_grad()
    # Print epoch result
    print(f'epoch: {epoch+1}, loss= {total_loss.item():.4f}')

除了 sigmoid 激活之外,您不應該使用 ReLU 激活。 而是直接將torch.sigmoid(self.linear(x))返回到nn.BCELoss

但是,您應該使用nn.BCELossWithLogits來獲得數值穩定性:它結合了 sigmoid 層和二元交叉熵損失。 在這種情況下,只有 output logitsself.linear(x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM