【问题标题】:Keras deviance custom lossKeras 偏差自定义损失
【发布时间】:2019-03-27 01:38:47
【问题描述】:

我正在尝试使用偏差作为自定义损失函数来优化神经网络 wuth keras。我试过这个:

#building model
model = keras.Sequential()
model.add(Dense(10, input_dim = 6, activation = "relu"))
model.add(Dense(5, activation = "relu"))
model.add(Dense(1, activation = "sigmoid"))

#DEF CUSTOM LOSS
def custom_loss():
    def loss(y_true, y_pred):
        return (2. *(KB.log(y_true) - KB.log(y_pred)))
    return loss


model.compile(loss = custom_loss(), optimizer = 'sgd')
model.fit(factorsTrain, yTrain, epochs = 2)

但是它给了-inf作为损失,所以我猜它根本不能正常工作,我在那里做错了什么吗?

编辑:我在最后一层将激活更改为指数,以确保值介于 0 和 1 之间。我还注意到,由于我的一些 y_true(实际上大多数)等于 0,我将损失函数更改为此(还添加了 1e-07 的 epsilon 以确保我不计算 ln(0):

#DEF CUSTOM LOSS
def custom_loss():
    def loss(y_true, y_pred):

        return (( KB.sqrt( KB.square(2 * (KB.log(y_true + KB.epsilon()) -    KB.log(y_pred + KB.epsilon())) ))))
    return loss

现在我不再得到 -inf 但我仍然得到 NaN

【问题讨论】:

    标签: python machine-learning keras


    【解决方案1】:

    设法通过稍微更改公式来修复它,以强制日志中的值 >= 0

    def Deviance_loss():
        def loss(y_true, y_pred):
            y_true = KB.max(y_true, 0)
            return (KB.sqrt(KB.square( 2 * KB.log(y_true + KB.epsilon()) - KB.log(y_pred))))
        return loss
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 2017-12-18
      • 2020-03-27
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      相关资源
      最近更新 更多