tensorflow 损失增加的可能解释?

ufj5ltwl  于 2023-02-19  发布在  其他
关注(0)|答案(3)|浏览(122)

我有一个4万张的图像数据集,这些图像来自四个不同的国家,包含了不同的主题:户外场景、城市场景、菜单等。我想使用深度学习来对图像进行地理标记。
我从3个conv-〉relu-〉pool层的小型网络开始,然后添加了3个层来深化网络,因为学习任务并不简单。
我的损失是这样做(与3层和6层网络):x1c 0d1x:
损失实际上开始时比较平稳,下降了几百步,然后开始缓慢上升。

我的损失如此增加,有什么可能的解释?

我的初始学习率设置得很低:1 e-6,但我试过1 e-3|4|我已经在两个类别的小数据集上对网络设计进行了合理性检查,这两个类别具有不同的主题,损失按预期持续下降。训练准确率徘徊在40%左右

62lalag4

62lalag41#

我通常会说你的学习率太高了,但是看起来你已经排除了这一点。你应该检查进出层的数字的大小。你可以使用tf.print来做这件事。也许你不小心输入了一个黑色的图像,或者你可以找到数字变得疯狂的层。
另外,你是如何计算交叉熵的呢?你可能想在对数里面加上一个小的epsilon,因为当它的输入接近零时,它的值会变成无穷大。或者更好的方法是使用tf.nn.sparse_softmax_cross_entropy_with_logits(...)函数,它会为你提供数值稳定性。
由于交叉熵的代价很高,所以网络输出几乎全是零(或接近零的值),由于你没有发布任何代码,我不能说为什么,我想你可能只是在计算代价函数时不小心把一些东西归零了。

wj8zmpe1

wj8zmpe12#

我也面临着这个问题,我正在使用keras库(tensorflow后端)

Epoch 00034: saving model to /home/ubuntu/temp/trained_data1/final_dev/final_weights-improvement-34-0.627.hdf50
Epoch 35/150
226160/226160 [==============================] - 65s 287us/step - loss: 0.2870 - acc: 0.9331 - val_loss: 2.7904 - val_acc: 0.6193
Epoch 36/150
226160/226160 [==============================] - 65s 288us/step - loss: 0.2813 - acc: 0.9331 - val_loss: 2.7907 - val_acc: 0.6268

Epoch 00036: saving model to /home/ubuntu/temp/trained_data1/final_dev/final_weights-improvement-36-0.627.hdf50
Epoch 37/150
226160/226160 [==============================] - 65s 286us/step - loss: 0.2910 - acc: 0.9330 - val_loss: 2.5704 - val_acc: 0.6327
Epoch 38/150
226160/226160 [==============================] - 65s 287us/step - loss: 0.2982 - acc: 0.9321 - val_loss: 2.5147 - val_acc: 0.6415

Epoch 00038: saving model to /home/ubuntu/temp/trained_data1/final_dev/final_weights-improvement-38-0.642.hdf50
Epoch 39/150
226160/226160 [==============================] - 68s 301us/step - loss: 0.2968 - acc: 0.9318 - val_loss: 2.7375 - val_acc: 0.6409
Epoch 40/150
226160/226160 [==============================] - 68s 299us/step - loss: 0.3124 - acc: 0.9298 - val_loss: 2.8359 - val_acc: 0.6047

Epoch 00040: saving model to /home/ubuntu/temp/trained_data1/final_dev/final_weights-improvement-40-0.605.hdf50
Epoch 41/150
226160/226160 [==============================] - 65s 287us/step - loss: 0.2945 - acc: 0.9315 - val_loss: 3.5825 - val_acc: 0.5321
Epoch 42/150
226160/226160 [==============================] - 65s 287us/step - loss: 0.3214 - acc: 0.9278 - val_loss: 2.5816 - val_acc: 0.6444

当我看到我的模型时,模型由太多的神经元组成,简而言之,模型是过度拟合的。我减少了2个密集层的神经元数量(从300个神经元减少到200个神经元)

pbossiut

pbossiut3#

这可能对那些面临类似问题的人有用。OP使用的是Tensorflow,在这种情况下,这是无关紧要的,也不是答案,但如果你用手实现神经网络和反向传播(例如课程作业或作业)确保你是从参数中减去梯度,而不是加上梯度。增加梯度将远离最近的最小值,从而增加损失。我有这个非常的问题,只有大约30分钟前写这篇文章。

相关问题