python – R Keras中的自定义丢失函数

前端之家收集整理的这篇文章主要介绍了python – R Keras中的自定义丢失函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想计算加权均方误差,其中权重是数据中的一个向量.我根据堆栈溢出提供的建议编写了一个自定义代码.

功能如下:

weighted_mse <- function(y_true,y_pred,weights){
  # convert tensors to R objects
  K        <- backend()
  y_true   <- K$eval(y_true)
  y_pred   <- K$eval(y_pred)
  weights  <- K$eval(weights)

  # calculate the metric
  loss <- sum(weights*((y_true - y_pred)^2)) 

  # convert to tensor
  return(K$constant(loss))
  }

但是,我不知道如何将自定义函数传递给编译器.如果有人可以帮助我会很棒.谢谢.

model      <- model %>% compile(
                loss = 'mse',optimizer = 'rmsprop',metrics = 'mse')

问候

最佳答案
你无法评估损失的功能.这将破坏图表.

您应该只使用fit方法的sample_weight参数:https://keras.rstudio.com/reference/fit.html

##not sure if this is valid R,but 
##at some point you will call `fit` for training with `X_train` and `Y_train`,##so,just add the weights.
history <- model$fit(X_train,Y_train,...,sample_weight = weights)

这就是全部(不要使用自定义损失).

只是为了知识 – 传递损失函数进行编译

仅适用于采用y_true和y_pred的函数. (如果您使用的是sample_weights,则没有必要)

model      <- model %>% compile(
            loss = weighted_mse,metrics = 'mse')

但这不起作用,你需要类似于@spadarian创建的包装器.

此外,保持数据和权重之间的相关性将非常复杂,因为Keras会分批分割您的数据,也因为数据会被洗牌.

猜你在找的Python相关文章