2

我正在调试一个序列到序列的模型,并故意尝试完美地过拟合约 200 个样本的小数据集(长度在 5-50 之间的句子对)。我在 pytorch 中使用负对数似然损失。我得到低损失(~1e^-5),但在同一数据集上的准确率只有 33%。

我也在 3 个样本上训练了模型,并获得了 100% 的准确率,但在训练期间我有损失。我的印象是,如果预测标签和目标标签之间不匹配,负对数似然只会产生损失(损失在 ~1e^-5 的同一区域内)?

我的代码中可能存在错误吗?

4

1 回答 1

1

您的代码中没有错误。
事情通常在深度网络中工作的方式是网络预测对(即对数似然)。然后使用 soft-max(或 sigmoid 函数)将这些 logit 转换为概率。最终基于预测概率评估交叉熵。
这种方法的优点是数值稳定,并且易于训练。另一方面,由于 soft-max,您的预测永远不可能有“完美”的 0/1 概率:也就是说,即使您的网络具有完美的准确性,它也永远不会将概率 1 分配给正确的预测,而是“接近一个”。结果,损失将始终为正(尽管很小)。

于 2020-07-14T04:53:09.657 回答