那位兄弟能指点一下吗?
pytorch 预测污染浓度 train loss 和test loss 下降,train acc 和 test acc 不变,一直不知道什么原因造成的。
图像如下:
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
你把代码发过来运行一下看看
继续训练:(这里的图片是之前训练70轮的时候截的,后来改成60波的时候忘记截图了。。。但数据是差不多的,60波训练最终也能达到75%的准确率)