求问!刚学机器学习,数据没问题,但是输出的这个损失度是不是不太对啊,怎么一直是0
train_data, train_label, test_data, test_label = load_dataset(dataset)
dataset = torch.utils.data.TensorDataset(torch.tensor(train_data), torch.tensor(train_label))
dataloader = torch.utils.data.DataLoader(dataset, batch_size=40, shuffle=True)
# 2. 模型定义 ---
model = nn.Sequential( # 顺序模型
nn.Linear(288, 100), # 线性层
nn.Sigmoid(),
nn.Linear(100, 2)
)
# 损失函数
loss = nn.CrossEntropyLoss()
# 准确率
def accuracy(y_pred, y_true):
correct_pred = torch.eq(torch.argmax(y_pred, 1), y_true)
return torch.mean(correct_pred.float())
# 训练步
def train_step(model, x, y, opt):
current_loss = loss(model(x), torch.argmax(y, 1))
current_loss.backward()
with torch.no_grad():
acc = accuracy(model(x), y)
opt.step()
opt.zero_grad()
return current_loss.item(), acc.item()
# 3. 创建模型 ---
opt = torch.optim.SGD(model.parameters(), lr=0.1) # 标准梯度下降
ls = [] # 记录损失函数值
accs = [] # 记录准确率
# 4. 训练 ---
for _ in range(100):
for batch_data, batch_label in dataloader:
l, acc = train_step(model, batch_data, batch_label, opt)
ls.append(l)
accs.append(acc)
test_acc = accuracy(model(torch.tensor(test_data)), torch.tensor(test_label))
print("test acc:", test_acc.detach().data)
plt.plot(ls)
plt.plot(accs)
plt.legend(['loss', 'acc'])
plt.show()