Python keras:使用逻辑运算符实现自定义度量
我正在尝试创建一个自定义指标来评估keras模型。如果y_true和y_pred都高于或低于某个值(在我的示例5中),则返回1,否则返回0。下面的lambda表达式是一个演示,说明了我想要实现的目标Python keras:使用逻辑运算符实现自定义度量,python,keras,Python,Keras,我正在尝试创建一个自定义指标来评估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 但是函数总是返回0 最后一层的输出与形状呈线性关系[None,2]。有人能给我解释一下实现
lambda y_pred, y_true : 1 if y_true > 5 and y_pred > 5 or y_true < 5 and y_pred < 5 else 0
但是函数总是返回0
最后一层的输出与形状呈线性关系[None,2]。有人能给我解释一下实现自定义指标的方法吗
当您检查aremaj=K时,谢谢您。所有(maj)您需要使用axis=0检查它。
areman
和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]
工作代码:
PS:您还可以使用更详细的变量名,因为
aremaj
不是很有描述性,而SAGR
是大写加非描述性。添加了一个答案。让我知道这是否有用,谢谢:)仅供参考在发布此答案之前,我确实使用Tensorflow专有函数解决了以下问题:def newSAGR(y_-true,y_-pred):ma=tf.logical_和(K.morer(y_-pred,5),K.morer(y_-true,5))me=tf.logical_和(K.less(y_-pred,5),K.less(y_-true,5))返回K.mean(tf.logical_或(ma,me))
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]