将Keras模型的损失函数乘以常数C,并将其学习率除以C

将Keras模型的损失函数乘以常数C,并将其学习率除以C,keras,Keras,“在Keras中,如果将模型的损失函数乘以某个常数C,并将学习率除以C,训练过程中不会出现差异”,这是真的吗 我有一个由Keras实现的模型。我将损失函数定义为: def my_loss(y_true, y_est): return something 在第一个场景中,我使用了一个学习率等于0.005的Adam优化器,并使用该损失函数和优化器编译模型。我在一组训练数据上对模型进行了拟合,并观察到其损失在不到100个时期内从0.2降至0.001 在第二种情况下,我将损失函数更改为:

“在Keras中,如果将模型的损失函数乘以某个常数C,并将学习率除以C,训练过程中不会出现差异”,这是真的吗

我有一个由Keras实现的模型。我将损失函数定义为:

def my_loss(y_true, y_est): 
     return something
在第一个场景中,我使用了一个学习率等于0.005的Adam优化器,并使用该损失函数和优化器编译模型。我在一组训练数据上对模型进行了拟合,并观察到其损失在不到100个时期内从0.2降至0.001

在第二种情况下,我将损失函数更改为:

def my_loss(y_true, y_est):
    return 1000 * something
优化器的学习率为0.000005。然后,我用新的损失函数和优化器编译模型,看看损失函数会发生什么变化。
据我所知,由于新损失的梯度是先前梯度的1000倍,新学习率是先前学习率的0.001倍,在第二种情况下,损失函数应该在不到100个时代内从200下降到1。但令人惊讶的是,我观察到损失函数停留在200左右,几乎没有减少


有人对此有任何理由吗?

如果你尝试使用SGD,结果将是你所期望的。然而,损失规模对adam没有影响。我建议你理解那些关于亚当的公式。因此,您只是改变了网络的学习率,而学习率对于您的网络来说太小了

如果您尝试使用SGD,结果将是您所期望的。然而,损失规模对adam没有影响。我建议你理解那些关于亚当的公式。因此,您只是改变了网络的学习率,而学习率对于您的网络来说太小了

在不改变学习速度的情况下进行测试。在这两种情况下,速度很可能是相同的。如果这是真的,那么梯度可能在应用学习速率之前被归一化。(我建议你使用两个具有相同权重的相等模型,这样你就不会被随机因素误导了)。我相信Adam和其他自适应优化器预计会出现某种规模的损失函数。如果你把它乘以或除以一个足够大的常数,它们就不能正常工作了。对于普通的优化器,它应该足以重新调整学习速率,但是对于Adam,您可能还应该调整其他超参数(beta1和beta2)。这只是一个未经验证的假设,基于我现在在模型中看到的情况,在不改变学习率的情况下进行测试。在这两种情况下,速度很可能是相同的。如果这是真的,那么梯度可能在应用学习速率之前被归一化。(我建议你使用两个具有相同权重的相等模型,这样你就不会被随机因素误导了)。我相信Adam和其他自适应优化器预计会出现某种规模的损失函数。如果你把它乘以或除以一个足够大的常数,它们就不能正常工作了。对于普通的优化器,它应该足以重新调整学习速率,但是对于Adam,您可能还应该调整其他超参数(beta1和beta2)。这只是一个未经验证的假设,基于我现在在模型中看到的情况