Pytorch测试损失随着准确度的提高而增加

时间:2018-01-31 11:43:11

标签: python neural-network deep-learning pytorch

我正在尝试使用Pytorch和BabI数据集实现 End to End Memory Network。 网络架构是:

MemN2N (
(embedding_A): Embedding(85, 120, padding_idx=0)
(embedding_B): Embedding(85, 120, padding_idx=0)
(embedding_C): Embedding(85, 120, padding_idx=0)
(match): Softmax ()
)

85是词汇量大小,120是嵌入大小。 损失函数是交叉熵,优化器是RmsProp。  结果是

Epoch    Train Loss  Test Loss  TrainAcc TestAcc
10       0.608         11.213       1.0     0.99
20       0.027         11.193       1.0     0.99
30       0.0017        11.740       1.0     0.99
40       0.0006        12.190       1.0     0.99
50       5.597e-05     12.319       1.0     0.99
60       3.366-05      12.379       1.0     0.99
70       2.72e-05      12.361       1.0     0.99
80       2.64e-05      12.333       1.0     0.99
90       2.63e-05      12.329       1.0     0.99
100      2.63e-05      12.329       1.0     0.99
110      2.63e-05      12.329       1.0     0.99
120      2.63e-05      12.329       1.0     0.99
Final TrainAcc TestAcc
    1.0     0.999

我知道准确性很好,但我想知道测试丢失的行为。 由于训练损失减少,测试损失增加。 每个损失值的计算相同。它不应该减少吗?我使用任务1来显示,但行为与其他任务相同。

你对这种行为有什么看法吗?

1 个答案:

答案 0 :(得分:2)

当训练损失继续减少但是测试损失开始增加时,那就是您开始overfit的那一刻,这意味着您的网络权重适合您正在训练的数据越来越好,但这额外拟合不会推广到新的看不见的数据。这意味着你应该停止训练。

你在120个维度中嵌入80个单词,所以你根本就没有信息瓶颈,你只有80个单词的维度太多了。你有这么多的免费参数,你可以适应任何东西,甚至噪音。尝试改变120为10,可能你不会再适合。如果你尝试使用2个维度而不是120个维度,那么你可能会不合适。

过度拟合:当您的模型具有足够的容量来适应您的训练数据的特殊性时,这些特征不会推广到来自同一分布的新数据。

适合不足:当您的模型没有足够的容量来适应您的训练数据时(您无法将训练损失"关闭"为零)。

在您的情况下,我猜测您的模型对您的训练数据过于自信(输出概率太接近1或0),这在训练数据的情况下是合理的,但对您的测试数据过于自信(或您没有训练的任何其他数据)。