【问题标题】:Can I use my own cost function in keras?我可以在 keras 中使用自己的成本函数吗?
【发布时间】:2018-11-27 01:18:04
【问题描述】:

编译模型时,您将参数损失传递给编译函数。例如:

model.compile(loss='mean_squared_error', 优化器='adam') 但我很好奇 Keras 中是否有办法传递我自己的成本函数?

【问题讨论】:

  • 我发现以下内容非常有用:towardsdatascience.com/… 它没有为@konstantinosKokos 答案添加任何内容,因此我仅作为评论发布。但仍然值得您阅读。

标签: machine-learning keras


【解决方案1】:

是的,你可以。自定义损失可以实现为一个函数,该函数将采用两个张量,即预测的 y 和基本事实,并返回一个标量。该函数使用的数学需要在 tensorflow 函数上定义,以便模型能够通过它们反向传播值。如果您需要您的函数接受比 y_pred 和 y_true 更多的输入,您可以将自定义损失包装在一个更广泛的函数中,该函数接受额外的参数并返回一个只需要 y_true 和 y_pred 的函数。下面举两个例子。

二元交叉熵和mse之间的混合损失

from keras.losses import mean_squared_error, binary_crossentropy

def my_custom_loss(y_true, y_pred):
    mse = mean_squared_error(y_true, y_pred)
    crossentropy = binary_crossentropy(y_true, y_pred)
    return mse + crossentropy

加权混合物(包装)

def my_custom_loss_wrapper(mse_weight, xentropy_weight):
   def my_custom_loss(y_true, y_pred):
       mse = mean_squared_error(y_true, y_pred)
       crossentropy = binary_crossentropy(y_true, y_pred)
       return mse_weight * mse + xentropy_weight * crossentropy
   return my_custom_loss

【讨论】:

  • 在定义了我的自定义损失函数之后,我是否运行如下代码? : model.compile(loss='my_custom_loss', optimizer='adam')
  • 不。当 loss 的参数是一个字符串时,它会映射到带有默认参数的预定义损失字典。当您想使用自定义损失或带有非默认参数的默认损失时,您必须调用传递函数本身,即 loss=my_custom_loss` 或 loss=my_custom_wrapper(args)loss=adam(lr=0.005)
猜你喜欢
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
相关资源
最近更新 更多