14

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

我从一个包含 3 个 conv->relu->pool 层的小型网络开始,然后再添加 3 个来加深网络,因为学习任务并不简单。

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

损失实际上开始有点平稳并下降了几百步,但随后开始爬升。

我的损失像这样增加的可能解释是什么?

我的初始学习率设置得很低:1e-6,但我也尝试过 1e-3|4|5。我已经对具有不同类别主题的两个类别的小型数据集进行了完整性检查,并且损失不断下降。训练准确率徘徊在 ~40%

4

2 回答 2

8

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

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

由于您的交叉熵的成本如此之高,听起来网络输出几乎全为零(或接近零的值)。由于您没有发布任何代码,我不能说为什么。我认为您可能只是偶然在成本函数计算中将某些东西归零。

于 2016-10-05T09:47:42.367 回答
0

我也面临这个问题,我正在使用 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 个神经元)

于 2018-05-17T06:55:56.100 回答