我有一个奇怪的表演,我无法解释。在我的网络训练期间,在我完成训练批次的计算之后,我也直接通过验证集,获取一个批次并在其上测试我的模型。因此,我的验证并不是在与培训不同的步骤上进行的。但我只是做了一批培训,还有一批验证
我的代码与此类似:
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)
最后,我可以看到我的模型在每个时代都有很好的训练和验证精度。然而,从测试数据来看,它并没有那么好。此外,验证损失是训练损失的两倍
最终测试精度差的原因可能是什么?如果有人能解释我的经历并推荐一些解决方案,我会很高兴:)
我非常肯定,原因在于没有代表性的验证数据集
非代表性验证数据集意味着验证数据集不能提供足够的信息来评估模型的泛化能力。 如果与训练数据集相比,验证数据集的示例太少,则可能发生这种情况。 确保随机选取培训和测试数据,并尽可能准确地表示相同的分布和真实分布
培训、测试和验证的数据集大小是多少
过度拟合似乎是这里的问题,您可以使用正则化技术(如L1、L2或Dropout)进行检查
相关问题 更多 >
编程相关推荐