使用 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 <- backend()
调用,它允许您对张量对象进行操作。
【讨论】:
以上是关于使用 Keras 在 R Studio 中编写损失函数的主要内容,如果未能解决你的问题,请参考以下文章