gpt4 book ai didi

python - 喀拉斯 : Implementing a custom metric with logical operators

转载 作者:行者123 更新时间:2023-12-01 01:57:52 26 4
gpt4 key购买 nike

我正在尝试创建一个自定义指标来评估 keras 模型。评估包括如果 y_true 和 y_pred 都高于或低于某个值(在我的例子中为 5),则返回 1,否则返回 0。下面的 lambda 表达式是一个演示,说明了我想要实现的目标

lambda y_pred, y_true : 1 if y_true > 5  and y_pred > 5 or y_true < 5 and y_pred < 5 else 0

我尝试在自定义 keras 模型上实现它,执行以下操作:

def SAGR(y_true, y_pred):
maj = K.greater([y_true, y_pred], 5)
men = K.less([y_true, y_pred], 5)
aremaj= K.all(maj)
aremen = K.all(men)
res = K.any([aremaj, aremen])

return K.mean(K.cast(res,'float32'))

但该函数始终返回 0。

最后一层的输出与形状 [None, 2] 呈线性关系。谁能向我解释一下实现自定义指标的方法吗?

谢谢

最佳答案

当您检查aremaj= K.all(maj)时,您需要使用axis=0进行检查。 aremenres

也是如此
def SAGR(y_true, y_pred):
maj = K.greater([y_true, y_pred], 5)
men = K.less([y_true, y_pred], 5)
aremaj= K.all(maj, axis=0)
aremen = K.all(men, axis=0)
res = K.any([aremaj, aremen], axis=0)
res_final = K.mean(K.cast(res,'float32'))
print(K.eval(res_final))
return res_final

说明:

K.eval(maj) # Looks like this
[[False False True True]
[False True True False]]

K.eval(K.all(maj)) # evaluates to 1 value:
False

print(K.eval(K.all(maj, axis=0)))
# What we actually want is a comparison at axis 0 level.
[False False True False]

工作代码:Link

PS:您还可以使用更详细的变量名称,因为 aremaj 不是很有描述性,而 SAGR 是大写且不具有描述性。

关于python - 喀拉斯 : Implementing a custom metric with logical operators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49956664/

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