对损失增加的可能解释?

Joh*_*len 8 convolution deep-learning tensorflow tensorboard cross-entropy

我有来自四个不同国家的40k图像数据集.图像包含各种主题:室外场景,城市场景,菜单等.我想使用深度学习来对图像进行地理标记.

我开始使用一个由3个conv-> relu-> pool层组成的小型网络,然后又添加了3个以加深网络,因为学习任务并不简单.

我的损失是这样做的(包括3层和6层网络):在此输入图像描述:

实际上,这种损失开始变得平滑并且几百步下降,但随后开始逐渐上升.

对于我这样增加的损失有什么可能的解释?

我的初始学习率设定得很低:1e-6,但我也试过1e-3 | 4 | 5.我对网络设计进行了理智检查,检查了两个具有类别不同主题的类的小型数据集,并且损失会根据需要不断下降.列车精度徘徊在~40%

cha*_*255 6

我通常会说你的学习率太高了,但看起来你已经排除了这一点。您应该检查进出图层的数字的大小。您可以使用 tf.Print 来执行此操作。也许您不知何故不小心输入了黑色图像,或者您可以找到数字疯狂的图层。

另外你如何计算交叉熵?您可能希望在日志内添加一个小的 epsilon,因为当其输入接近零时,它的值将变为无穷大。或者更好地使用tf.nn.sparse_softmax_cross_entropy_with_logits(...)为您处理数值稳定性的函数。

由于交叉熵的成本如此之高,听起来网络输出几乎全为零(或接近零的值)。由于您没有发布任何代码,我无法说出原因。我认为您可能只是无意中将成本函数计算中的某些内容归零。

  • 它甚至更强大 - 您绝对不希望在最后一层使用 relus,您**希望** logits 能够达到任意负值。 (3认同)
  • 我想你可能是。否则成本会无限大,你会得到一个 nan。由于某种原因,输出肯定会全为零。也许尝试使用 elu 激活而不是 relu,因为它们不会在零时死亡。 (2认同)