我有一个4万张的图像数据集,这些图像来自四个不同的国家,包含了不同的主题:户外场景、城市场景、菜单等。我想使用深度学习来对图像进行地理标记。
我从3个conv-〉relu-〉pool层的小型网络开始,然后添加了3个层来深化网络,因为学习任务并不简单。
我的损失是这样做(与3层和6层网络):x1c 0d1x:
损失实际上开始时比较平稳,下降了几百步,然后开始缓慢上升。
我的损失如此增加,有什么可能的解释?
我的初始学习率设置得很低:1 e-6,但我试过1 e-3|4|我已经在两个类别的小数据集上对网络设计进行了合理性检查,这两个类别具有不同的主题,损失按预期持续下降。训练准确率徘徊在40%左右
3条答案
按热度按时间62lalag41#
我通常会说你的学习率太高了,但是看起来你已经排除了这一点。你应该检查进出层的数字的大小。你可以使用tf.print来做这件事。也许你不小心输入了一个黑色的图像,或者你可以找到数字变得疯狂的层。
另外,你是如何计算交叉熵的呢?你可能想在对数里面加上一个小的epsilon,因为当它的输入接近零时,它的值会变成无穷大。或者更好的方法是使用
tf.nn.sparse_softmax_cross_entropy_with_logits(...)
函数,它会为你提供数值稳定性。由于交叉熵的代价很高,所以网络输出几乎全是零(或接近零的值),由于你没有发布任何代码,我不能说为什么,我想你可能只是在计算代价函数时不小心把一些东西归零了。
wj8zmpe12#
我也面临着这个问题,我正在使用keras库(tensorflow后端)
当我看到我的模型时,模型由太多的神经元组成,简而言之,模型是过度拟合的。我减少了2个密集层的神经元数量(从300个神经元减少到200个神经元)
pbossiut3#
这可能对那些面临类似问题的人有用。OP使用的是Tensorflow,在这种情况下,这是无关紧要的,也不是答案,但如果你用手实现神经网络和反向传播(例如课程作业或作业)确保你是从参数中减去梯度,而不是加上梯度。增加梯度将远离最近的最小值,从而增加损失。我有这个非常的问题,只有大约30分钟前写这篇文章。