我正在使用 Inception-V4 模型使用 tensorflow 进行多标签分类。该模型的输出维度为 51,对于这 51 个类,我的标签要么是 1,要么是 0。我没有进一步修改 Inception-V4。
为了学习多标签分类,我通过应用 tf.losses.sigmoid_cross_entropy 来使用 sigmoid 交叉熵损失。我的 logits 没有缩放(没有激活函数),我的标签看起来也很好。整体损失通过 tf.losses.get_total_loss() 计算。
现在整个系统可以正常工作并学习多个 epoch。然而,在大约 15 到 20 个 epoch 的学习之后,它有时会产生负损失值。此时损失在 0.01 左右,但有时会下降到 -0.15 甚至更低(我曾经看到过 -1)。此外,在这些步骤之后,我的模型的准确性也会下降,所以我认为它实际上是在伤害它。
有谁知道我做错了什么?有谁之前经历过这个吗?我能做什么?
我还没有包含我的代码,因为我认为它只是一个简单的 Estimator 管道,我直接获取 inception_v4 的 logits 和 auxLogits 并将这样的 sigmoid 交叉熵损失附加到它们两者上。但如果代码有帮助,我可以尝试将其缩小以将其添加到此处。
这就是 logits 的损失: