为什么在简单的二进制分类中准确率保持在 0.5 左右?

问题描述 投票:0回答:0

我做了一个二元分类器。 分类器由 3 个线性层、2 个 relu 层和最后一个 sigmoid 层组成。 然后,我训练了我的分类器。

然而,我的二元分类器的训练精度并没有降低:( 它应该分类 (x1,x2)->1 如果 x10

我的密码是:

import torch
from torch import nn
from torch import optim

class Classifier(nn.Module):
    def __init__(self):
        super(Classifier, self).__init__()
        self.layer1=nn.Linear(2,2)
        self.relu1=nn.ReLU()
        self.layer2=nn.Linear(2,2)
        self.relu2=nn.ReLU()
        self.layer3=nn.Linear(2,1)
        self.sigmoid=nn.Sigmoid()       
    def forward(self, x):
        x = self.layer1(x)
        x = self.relu1(x)
        x = self.layer2(x)
        x = self.relu2(x)
        x = self.layer3(x)
        x = self.sigmoid(x)
        return x

model_wo = Classifier()
criterion_wo = nn.BCELoss()
optimizer_wo = optim.Adam(model_wo.parameters(), lr=0.0001)
loss_history_wo=[]
val_loss_history_wo=[]


for step in range(10000):
    
    input_wo=torch.randn((1000,2))
    label_wo=(((input_wo[:,0])>input_wo[:,1])).float().reshape(-1,1)
    
    pred_wo = model_wo(input_wo)
    loss_wo = criterion_wo(pred_wo, label_wo) 
    
    optimizer_wo.zero_grad()
    loss_wo.backward()
    optimizer_wo.step()


    
    pred_wo = model_wo(input_wo).round()
    corr_pred_wo = (pred_wo==label_wo.reshape(-1))
    acc_w = corr_pred_wo.float().mean()

    input_val=torch.rand((1000,2))
    
    label_val=(((input_val[:,0])>input_val[:,1])).float().reshape(-1,1)
    
    pred_val_wo = model_wo(input_val)
    loss_val_wo = criterion_wo(pred_val_wo, label_val)    
    
    print(f"step : {step}, train loss : {loss_wo}, train accuracy: {acc_w}, validation loss: {loss_val_wo}")
    loss_history_wo.append(loss_wo.item())
    val_loss_history_wo.append(loss_val_wo.item())

结果是:

step : 0, train loss : 0.7370945811271667, train accuracy: 0.5090000033378601, validation loss: 0.7618637084960938
step : 1, train loss : 0.7580508589744568, train accuracy: 0.47600001096725464, validation loss: 0.7370656132698059
step : 2, train loss : 0.7357947826385498, train accuracy: 0.5109999775886536, validation loss: 0.7306984066963196


step : 9998, train loss : 0.6932045817375183, train accuracy: 0.4869999885559082, validation loss: 0.6931705474853516
step : 9999, train loss : 0.6931028366088867, train accuracy: 0.5109999775886536, validation loss: 0.6930352449417114

谢谢

deep-learning pytorch classification
© www.soinside.com 2019 - 2024. All rights reserved.