【问题标题】:Learning rate has no effect学习率没有影响
【发布时间】:2020-07-09 04:33:54
【问题描述】:

我正在使用带有 Keras 的 MLP,并使用 sgd 进行了优化。我想调整学习率,但它似乎对训练没有任何影响。我尝试了小学习率(.01)和非常大的学习率(高达 1e28),效果几乎不明显。使用非常大的学习率时,我的损失不应该爆炸吗?

我正在使用具有 3 个隐藏层和 sigmoid 激活函数的全连接 NN。 损失是 BinaryCrossEntropy 的一种变体。目标是预测信用违约。训练集包含 500000 个示例,大约有 500000 个示例。 2% 的默认值。测试集包含 200000 行


def loss_custom_w(p):
    def loss_custom(y,yhat):
        y_l, y_lhat = keras.backend.flatten(y),keras.backend.flatten(yhat)
        eps = keras.backend.epsilon()
        y_lhat = keras.backend.clip(y_lhat, eps, 1-eps)

        return - keras.backend.mean(p*y_l*keras.backend.log(y_lhat) + (1-y_l)*keras.backend.log(1-y_lhat))
    return loss_custom

model = keras.Sequential([keras.layers.Dense(n_input), keras.layers.Dense(500, activation = 'sigmoid'), keras.layers.Dense(400, activation = 'sigmoid'), keras.layers.Dense(170, activation = 'sigmoid'), keras.layers.Dense(120, activation = 'sigmoid'), keras.layers.Dense(1, activation = 'sigmoid')])
sgd = keras.optimizers.SGD(lr = 1e20)
model.compile(optimizer = sgd, loss = loss_custom_w(8))
model.fit(x_train, y_train, epochs = 10, batch_size = 1000)

更新: - 我尝试更改激活函数以避免梯度消失,但没有奏效。

  • 问题不在于损失函数(我也尝试了其他损失)。

  • 实际上网络似乎运行良好,以及自定义损失。当我改变 p 的值时,它会做预期的事情。我只是不明白为什么学习率没有影响。分类器也给出了令人满意的结果。

  • 网络设法从两个类别中预测标签。当我使用较大的惩罚值(如预期的那样)时,它可以更好地预测 1 类

【问题讨论】:

  • 您能否提供有关您正在使用的数据和一些代码示例的更多详细信息?
  • 是的。我正在使用具有 3 个隐藏层和 sigmoid 激活函数的全连接 NN。损失是 BinaryCrossEntropy 的一种变体。目标是预测信用违约。训练集包含 500000 个示例,大约有 500000 个示例。 2% 的默认值。测试集包含 200000 行。
  • 感谢您提供更多详细信息。您能否提供您在 keras 中编写的实际代码,或者至少一般情况下它的外观?如果可能的话,您能否将该详细信息添加到原始问题中。我承认我对 Keras 不太熟悉,并且对这个问题的答案比回答它更好奇。如果您提供更多详细信息,其他人应该能够回答。
  • 有四个隐藏层,使用'sigmoid'激活,2个输入和输出层可能导致梯度消失。这意味着梯度无法到达主要层。 1-将隐藏层减少到两个或三个隐藏层 2-将激活函数更改为“Relu”。希望对你有帮助。
  • 谢谢。我将激活函数更改为 ReLU 以避免梯度消失,但我没有工作(学习率仍然没有效果)。我也试过其他的激活功能,还是没有效果。

标签: keras deep-learning classification learning-rate


【解决方案1】:

终于明白了。我没有在我的模型中指定输入形状(将第一层的“input_shape”关键字参数保留为“无”)。当我指定它时,它突然起作用了。我真的不明白为什么指定输入形状如此重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-22
    • 2019-01-12
    • 1970-01-01
    • 2020-10-22
    • 2017-10-29
    • 2018-10-25
    • 1970-01-01
    • 2021-03-15
    相关资源
    最近更新 更多