使用 Keras 创建自定义条件指标

Ric*_*d.R 5 python neural-network keras tensorflow

我正在尝试使用 keras 为我的神经网络创建以下指标:

自定义 Keras 指标

其中 d=y_{pred}-y_{true}

y_{pred} 和 y_{true} 都是向量

使用以下代码:

导入 keras.backend 作为 K

def score(y_true, y_pred):
        d=(y_pred - y_true)
        if d<0:
            return K.exp(-d/10)-1
        else:
            return K.exp(d/13)-1
Run Code Online (Sandbox Code Playgroud)

用于编译我的模型:

model.compile(loss='mse', optimizer='adam', metrics=[score])
Run Code Online (Sandbox Code Playgroud)

我收到以下错误代码,但无法更正问题。任何帮助,将不胜感激。

raise TypeError("Using a tf.Tensoras a Python boolis not allowed." "Use if t is not None:instead of if t:to test if a " "tensor is defined, and use TensorFlow ops like "

类型错误:不允许将 atf.Tensor用作 Python bool。使用 if t is not None:而不是if t:测试是否定义了张量,并使用 TensorFlow 操作(例如 tf.cond)执行以张量值为条件的子图。

Mar*_*man 5

您提供的指标不是每次都执行的函数,而是需要评估的函数(计算图)的构造。所以它需要是确定性的。

尝试:

def score(y_true, y_pred):
    d = y_pred - y_true
    mask = K.less(y_pred, y_true)  # element-wise True where y_pred < y_pred
    mask = K.cast(mask, K.floatx())  # cast to 0.0 / 1.0
    s = mask * (K.exp(-d / 10) - 1) + (1 - mask) * (K.exp(d / 13) - 1)  
    # every i where mask[i] is 1, s[i] == (K.exp(-d / 10) - 1)
    # every i where mask[i] is 0, s[i] == (K.exp(d / 13) - 1)
    return s
Run Code Online (Sandbox Code Playgroud)