如何在 R 中为 Keras 定义自定义度量函数?

数据挖掘 喀拉斯 r
2022-02-11 13:26:24

我刚开始使用 keras,想在编译模型时使用未加权的 kappa 作为指标。按照此处的说明,我尝试按如下方式定义我的自定义指标:

library(DescTools)  # includes function to calculate kappa
library(keras)

metric_kappa <- function(y_true, y_pred) {
   CohenKappa(y_true, y_pred)
} 

model %>% compile(
   loss = 'categorical_crossentropy',
   optimizer = optimizer_rmsprop(),
   metrics = metric_kappa
)

但是,我的定义一定有问题,因为我遇到了分段错误。任何关于如何解决这个问题以及如何正确设置自定义指标的想法都将受到高度赞赏。

2个回答

这个答案暗示了一个包装函数。这在您的用例中有效吗?

https://stackoverflow.com/a/51415066/655855

损失函数接收和输出张量,而不是 R 个对象。CohenKappa毫无疑问,适用于 R 数据帧。对于您在损失函数中执行的任何操作,或者您想在 Keras 模型范围内使用的任何其他函数(例如层激活函数),您基本上都受限于 TensorFlow 的后端函数。

这是Keras 对所有这些后端函数的很好的清单,或者更确切地说,是 Keras 对这些 Tensorflow 函数的访问器函数。(令人困惑的是,R 的数学中缀 -*至少/- 确实被正确解释为 Tensorflow 元素操作,因此没有k_multiply,例如。)

因此,基本上,您需要进行逆向工程CohenKappa(),以便您可以使用这些更基本的操作来编写其数学运算。