pytorch 预测污染浓度 train loss 和test loss 下降,train acc 和 test acc 不变

那位兄弟能指点一下吗?
pytorch 预测污染浓度 train loss 和test loss 下降,train acc 和 test acc 不变,一直不知道什么原因造成的。
图像如下:

img


训练函数和测试函数如下:

def train(dataloader, model, loss_fn, optimizer):
    size = len(dataloader.dataset)
    num_batch = len(dataloader)
    train_acc, train_loss = 0, 0

    # enumerate返回为数据和标签还有批次
    for num_batch, (x, y) in enumerate(dataloader):
        # 前向传播
        x, y = x.to(device), y.to(device)
        output = model(x)
        cur_loss = loss_fn(output, y)

        optimizer.zero_grad()
        cur_loss.backward()
        optimizer.step()

        train_loss += cur_loss.item()
        train_acc += (output.argmax(1) == y).type(torch.float).sum().item()

    train_acc /= size
    train_loss /= num_batch

    print('train_loss:', train_loss)
    print('train_acc:', train_acc)

    return train_acc, train_loss


# 定义验证函数
def val(dataloader, model, loss_fn):
    size = len(dataloader.dataset)
    # print(size)
    num_batch = len(dataloader)
    # print(num_batch)
    test_acc, test_loss = 0, 0

    with torch.no_grad():
        for num_batch, (x, y) in enumerate(dataloader):
            # 前向传播
            x, y = x.to(device), y.to(device)
            output = model(x)
            cur_loss = loss_fn(output, y)

            test_loss += cur_loss.item()
            test_acc += (output.argmax(1) == y).type(torch.float).sum().item()

        test_acc /= size
        test_loss /= num_batch

        print('test_loss:', test_loss)
        print('test_acc:', test_acc)

    return test_acc, test_loss

你把代码发过来运行一下看看

  • 这篇博客: pytorch入门攻略及项目实战之卷积神经网络进行验证码识别中的 可以看到前8轮训练,loss_train迅速降低,acc_train迅速升高,且在第八波acc_train就已经达到1即训练集中所有图片都已经全部拟合正确,此时测试集中数据的预测准确率acc_test在58.98% 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 继续训练:(这里的图片是之前训练70轮的时候截的,后来改成60波的时候忘记截图了。。。但数据是差不多的,60波训练最终也能达到75%的准确率)
    在这里插入图片描述