作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个自定义指标来评估 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
进行检查。 aremen
和 res
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/
我是一名优秀的程序员,十分优秀!