[英]Custom Loss Function in 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')
問候
我沒有使用Keras和R,但是按照文檔中的示例,可能這應該有效:
weighted_mse <- function(y_true, y_pred, weights){
K <- backend()
weights <- K$variable(weights)
# calculate the metric
loss <- K$sum(weights * (K$pow(y_true - y_pred, 2)))
loss
}
metric_weighted_mse <- custom_metric("weighted_mse", function(y_true, y_pred) {
weighted_mse(y_true, y_pred, weights)
})
model <- model %>% compile(
loss = 'mse',
optimizer = 'rmsprop',
metrics = metric_weighted_mse)
請注意,我正在使用丟失函數的包裝器,因為它有一個額外的參數。 此外,損失函數將輸入作為張量處理,這就是為什么你應該用K$variable(weights)
轉換權K$variable(weights)
。
你無法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_true
和y_pred
函數。 (如果您使用的是sample_weights
則沒有必要)
model <- model %>% compile(
loss = weighted_mse,
optimizer = 'rmsprop',
metrics = 'mse')
但這不起作用,你需要類似於@spadarian創建的包裝器。
此外,保持數據和權重之間的相關性將非常復雜,因為Keras會分批分割您的數據,也因為數據會被洗牌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.