当前位置: 首页 > 知识库问答 >
问题:

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

乔望
2023-03-14

“在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。然后我用新的损失函数和优化器编译模型,看看它的损失函数会发生什么。< br >在我的理解中,由于新损失的梯度是先前梯度的1000倍,并且新的学习速率是先前学习速率的0.001倍,所以在第二种情况下,损失函数应该在不到100个时期内从200下降到1。但令人惊讶的是,我观察到损失函数卡在200左右,几乎不减。

有人对此有任何理由吗?

共有1个答案

壤驷文华
2023-03-14

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

 类似资料:
  • 我似乎无法理解学习率的价值。我得到的是下面。 我已经尝试了200个epoch的模型,并希望查看/更改学习速率。这不是正确的方法吗?

  • 问题内容: 问题说明了一切。有人知道以下内容吗? …被优化成? 编译器会这样做吗?(我的兴趣在于GCC)。在某些情况下会这样做吗?在其他情况下却不会呢? 我真的很想知道,因为每次我写一个像这样可以优化的除法运算时,我都会花些精力思考是否浪费一秒钟宝贵的时间去做一个足以满足需要的除法运算。 问题答案: 即使g++ -O0(是,-O0!),也会发生这种情况。您的函数编译为: 请注意shrq $6,右移

  • 我有一个NN,它有两个相同的CNN(类似于暹罗网络),然后合并输出,并打算在合并的输出上应用自定义损失函数,如下所示: 在我的自定义损失函数中,我需要将y垂直分解为两块,然后对每一块应用分类交叉熵损失。但是,我不断从我的损失函数得到dtype错误,例如: ()中的ValueError回溯(最近一次调用)---- /usr/local/lib/python3。5/地区包/KERA/发动机/培训。编译

  • 我在获取数组中的整数之和时遇到问题,在获取整数*1.5的乘积时遇到问题。我下面的代码可能已经完全关闭了,因为我是Java新手,并且已经为此工作了好几个小时了。该程序的目的是输入5天内每天的工作小时数。有了这些,再加上工资率,你应该输出平均工作小时数、总小时数和总工资。如果有加班,工资还应包括加班费。任何帮助都将不胜感激。

  • 我正在尝试将数组的每个“列”乘以一个特定的数字,然后对每个“行”的结果求和。 我能够找出如何在单个阵列中执行此操作,但在2d阵列中却很难找到。 我需要递归地做这件事,所以没有循环。有人能提供一个伪代码,或者解释我应该为每列采取什么步骤吗? 如何将此代码转换为2d数组版本?