我做了一个二元分类器。 分类器由 3 个线性层、2 个 relu 层和最后一个 sigmoid 层组成。 然后,我训练了我的分类器。
然而,我的二元分类器的训练精度并没有降低:(
它应该分类 (x1,x2)->1 如果 x1
我的密码是:
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
谢谢