使用 Keras 在 R Studio 中编写损失函数

Posted

技术标签:

【中文标题】使用 Keras 在 R Studio 中编写损失函数【英文标题】:Writing a loss function in R studio using Keras 【发布时间】:2018-09-26 11:23:36 【问题描述】:

所以我正在尝试在 Keras 的 Rstudio 中编写自定义损失函数。当函数产生被低估的预测时,我基本上想惩罚更多。但是我不知道如何访问张量的成员。

到目前为止,这是我尝试过的:

myloss <- function(y_true, y_pred)

    penalize = k_flatten(y_pred) - k_flatten(y_true);
    penalize_pos = penalize >= 0
    penalize_neg = penalize < 0
    # I cannot find a mask function to turn penalize_pos into actual indecies
    #tried this but did not work
    A = penalize$eval()[penalize_pos$eval()]
    B = penalize$eval()[penalize_neg$eval()]

    return(sum(abs(A) + abs(B)*10))


我想知道您是否有任何建议。谢谢。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。我知道这已经很晚了,但这是我在搜索时找到的解决方案。 This website 有一个很好的教程,我觉得很有用。

与 Python 函数一样,R 的自定义损失函数需要对张量对象而不是 R 原语进行操作。为了执行这些操作,您需要使用backend() 获取对后端的引用。在我的系统配置中,这会返回对 tensorflow 的引用。

还包括以下代码sn-p:

# Mean Log Absolute Error
MLAE <- function( y_true, y_pred ) 
  K <- backend()
  K$mean( K$abs( K$log( K$relu(y_true *1000 ) + 1 ) - 
      K$log( K$relu(y_pred*1000 ) + 1)))

# Mean Squared Log Absolute Error
MSLAE <- function( y_true, y_pred ) 
  K <- backend()
  K$mean( K$pow( K$abs( K$log( K$relu(y_true *1000 ) + 1 ) - 
    K$log( K$relu(y_pred*1000 ) + 1)), 2))

注意K &lt;- backend() 调用,它允许您对张量对象进行操作。

【讨论】:

以上是关于使用 Keras 在 R Studio 中编写损失函数的主要内容,如果未能解决你的问题,请参考以下文章

忽略 keras 中 R 的缺失目标值的损失函数

使用keras在损失函数中批量逐元素产品

在 Keras 中构建自定义损失函数

使用 Keras 为损失函数构建自定义指标,但有错误

在 CNN 的 keras 自定义损失函数中操作数据

Keras 中的像素加权损失函数 - TensorFlow 2.0