我有一个奇怪的表现,我无法解释。在我的网络训练期间,在我完成训练批次的计算之后,我直接检查验证集并获取一个批次并在其上测试我的模型。因此,我的验证不是在与培训不同的步骤中完成的。但我只进行了一批培训,然后进行了一批验证。
我的代码看起来类似于:
for (data, targets) in tqdm(training_loader):
output = net(data)
log_p_y = log_softmax_fn(output)
loss = loss_fn(log_p_y, targets)
# Do backpropagation
val_data = itertools.cycle(val_loader)
valdata, valtargets = next(val_data)
val_output = net(valdata)
log_p_yval = log_softmax_fn(val_output)
loss_val = loss_fn(log_p_yval, valtargets)
归根结底,我可以看到我的模型在每个时期都具有非常好的训练和验证精度。但是,在测试数据上,它并没有那么好。此外,验证损失是训练损失的两倍。
最终测试精度差的原因可能是什么?如果有人能解释我的经历并推荐一些解决方案,我会很高兴:)

