0

我有一个奇怪的表现,我无法解释。在我的网络训练期间,在我完成训练批次的计算之后,我直接检查验证集并获取一个批次并在其上测试我的模型。因此,我的验证不是在与培训不同的步骤中完成的。但我只进行了一批培训,然后进行了一批验证。

我的代码看起来类似于:

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)

归根结底,我可以看到我的模型在每个时期都具有非常好的训练和验证精度。但是,在测试数据上,它并没有那么好。此外,验证损失是训练损失的两倍。

最终测试精度差的原因可能是什么?如果有人能解释我的经历并推荐一些解决方案,我会很高兴:)

这是训练和验证损失的图片。 在此处输入图像描述

这是训练和验证准确性的图片。 在此处输入图像描述

4

2 回答 2

0

您用于训练、测试和验证的数据集大小是多少?

过度拟合似乎是这里的问题,您可以使用 L1、L2 或 Dropout 等正则化技术进行检查。

于 2021-09-18T10:36:59.907 回答
0

我很确定非代表性验证数据集中的原因。

一个不具代表性的验证数据集意味着验证数据集没有提供足够的信息来评估模型的泛化能力。如果与训练数据集相比,验证数据集的示例太少,则可能会发生这种情况。确保您的训练和测试数据是随机挑选的,并尽可能准确地表示相同的分布和真实分布。

于 2021-09-18T07:21:13.613 回答