【问题标题】:Writing a loss function in R studio using Keras使用 Keras 在 R Studio 中编写损失函数
【发布时间】: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))

}

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

【问题讨论】:

    标签: r keras loss-function


    【解决方案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() 调用,它允许您对张量对象进行操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多