【问题标题】:How to create the custom loss function by adding negative entropy to the cross-entropy?如何通过向交叉熵添加负熵来创建自定义损失函数?
【发布时间】:2021-10-25 00:44:01
【问题描述】:

我最近阅读了一篇题为“REGULARIZING NEURAL NETWORKS BY PENALIZING CONFIDENT OUTPUT DISTRIBUTIONS https://arxiv.org/abs/1701.06548"”的论文。作者讨论了通过惩罚低熵来正则化神经网络 通过在负对数似然中添加负熵项并为模型训练创建自定义损失函数来输出分布。

值 β 控制置信度惩罚的强度。我已经为分类交叉熵编写了一个自定义函数,如下所示,但是需要将负熵项添加到损失函数中。

import tensorflow as tf
def custom_loss(y_true, y_pred):
    cce = tf.keras.losses.CategoricalCrossentropy()
    cce_loss = cce(y_true, y_pred)    
    return cce_loss

【问题讨论】:

  • 加上论文的链接会更好。无论如何,H 函数是什么?
  • H是熵函数;添加了论文的链接,

标签: python numpy tensorflow keras deep-learning


【解决方案1】:

您不需要自定义损失,因为它可以实现为活动正则化器(应用于层的输出):

def regularizer(beta):
    def entropy_reg(inp):
        return -beta * K.mean(inp * K.log(inp))

然后这可以应用到你的输出层:

model = Sequential()
#Add layers here
model.add(Dense(num_classes, activation="softmax",
          activity_regularizer=regularizer(0.01)))

【讨论】:

    【解决方案2】:

    y_pred 的熵本质上是y_pred 和它自身之间的分类交叉熵:

    def custom_loss(y_true, y_pred, beta):
        cce = tf.keras.losses.CategoricalCrossentropy()
        return cce(y_true, y_pred) - beta*cce(y_pred, y_pred)
    

    【讨论】:

    • 谢谢。既然关系成立,我也接受你的回答。
    猜你喜欢
    • 2021-02-03
    • 2021-01-20
    • 2019-11-02
    • 2019-07-28
    • 2021-08-25
    • 2017-03-14
    • 2018-09-03
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多