gpt4 book ai didi

python - R Keras 中的自定义损失函数

转载 作者:太空狗 更新时间:2023-10-29 23:56:48 26 4
gpt4 key购买 nike

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

函数如下:

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')

问候

最佳答案

您不能在损失函数中eval。这会破坏图形。

您应该只使用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)

仅此而已(不要使用自定义损失)。


仅供引用 - 将损失函数传递给compile

仅适用于采用 y_truey_pred 的函数。 (如果您使用 sample_weights 则不需要)

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

但这行不通,您需要类似于@spadarian 创建的包装器的东西。

另外,保持你的数据和权重之间的相关性会非常复杂,因为 Keras 会分批划分你的数据,也因为数据会被打乱。

关于python - R Keras 中的自定义损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51316307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com