【问题标题】:keras giving same loss on every epochkeras 在每个时代都给予相同的损失
【发布时间】:2016-02-21 18:39:42
【问题描述】:

我是 keras 的新手。

我在一个数据集上运行它,我的目标是减少对数损失。 对于每个时代,它都给了我相同的损失值。我很困惑我是否在正确的轨道上。

例如:

Epoch 1/5
91456/91456 [==============================] - 142s - loss: 3.8019 - val_loss: 3.8278
Epoch 2/5
91456/91456 [==============================] - 139s - loss: 3.8019 - val_loss: 3.8278
Epoch 3/5
91456/91456 [==============================] - 143s - loss: 3.8019 - val_loss: 3.8278
Epoch 4/5
91456/91456 [==============================] - 142s - loss: 3.8019 - val_loss: 3.8278
Epoch 5/5
91456/91456 [==============================] - 142s - loss: 3.8019 - val_loss: 3.8278

这里的 3.8019 在每个时期都是相同的。应该会少一些。

【问题讨论】:

    标签: conv-neural-network keras


    【解决方案1】:

    我也遇到了这个问题。经过深思熟虑,我发现这是我的输出层上的激活函数

    我有这个模型来预测二元结果:

    model = Sequential()
    model.add(Dense(16,input_shape=(8,),activation='relu'))
    model.add(Dense(32,activation='relu'))
    model.add(Dense(32,activation='relu'))
    model.add(Dense(1, activation='softmax'))
    

    我需要这个来进行二元交叉熵

    model = Sequential()
    model.add(Dense(16,input_shape=(8,),activation='relu'))
    model.add(Dense(32,activation='relu'))
    model.add(Dense(32,activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    

    我会查看您尝试解决的问题以及确保您的激活函数符合其需要所需的输出。

    【讨论】:

    • 你是怎么调试这个的?我有一个类似的问题,我不知道如何找到源
    • 同样的问题,类似的问题,无法调试。
    【解决方案2】:

    尝试将学习率降低到 0.0001 并使用 Adam。你的学习率是多少?

    其实不清楚是学习率的问题还是模型复杂度的问题,你能用这些说明进一步解释一下吗:

    1. 您的数据大小是多少,它是关于什么的?
    2. 您的模型的复杂性是多少?我们可以将您的复杂性与分析您的数据进行比较。如果您的数据太大,您需要更复杂的模型。
    3. 您是否标准化了您的输出?对于输入,这没什么大不了的,因为非标准化会给出结果,但如果您的输出是一些大于 1 的数字,您需要对数据进行标准化。如果您检查模型的最后一层的激活函数,它们通常是 sigmoid、softmax、tanh,它们经常将您的输出压缩到 0-1 和 -1-1。您需要根据上一个激活函数对数据进行归一化,并且然后将它们反向相乘以获得真实的结果。

    由于您是深度学习的新手,这些建议足以检查您的模型是否存在问题。你能检查他们并回复吗?

    【讨论】:

    • 以上描述不是答案,这些是进一步的cmet,需要分析问题。它用同样的问题误导了这个人。
    • 我和写这个问题的人有同样的问题。这个答案帮助我意识到我使用的默认学习率太高了。谢谢!
    【解决方案3】:

    通常当您正在训练的模型没有足够的容量(或成本函数不合适)时会出现此问题。或者在某些情况下,错误地我们输入模型的数据没有正确准备,因此每个样本的标签可能不正确,这使模型无能为力,无法减少损失。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,正在使用以下型号

      model = Sequential([
          Dense(10, activation ='relu', input_shape=(n_cols, )),
          Dense(3, activation ='softmax')
          ])
      

      我意识到我的问题实际上是一个回归问题,并且使用'softmax'作为最终层激活(适用于分类问题) 而不是别的东西。当我如下修改代码时,我能够解决在每个时期获得相同损失值的问题

      model = Sequential([
          Dense(10, activation ='relu', input_shape=(n_cols, )),
          Dense(3, activation ='relu'),
          Dense(1)
          ])
      

      所以,问题实际上是因为对回归问题使用了与分类相关的激活函数,反之亦然。你可能想检查一下你是否犯了同样的错误。

      【讨论】:

        猜你喜欢
        • 2017-08-17
        • 2020-12-09
        • 1970-01-01
        • 1970-01-01
        • 2020-01-27
        • 2019-09-27
        • 1970-01-01
        • 2020-12-07
        • 1970-01-01
        相关资源
        最近更新 更多