Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python keras:使用逻辑运算符实现自定义度量_Python_Keras - Fatal编程技术网

Python keras:使用逻辑运算符实现自定义度量

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]。有人能给我解释一下实现

我正在尝试创建一个自定义指标来评估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]。有人能给我解释一下实现自定义指标的方法吗


当您检查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]