自定义条件 Keras 指标

数据挖掘 机器学习 Python 神经网络 喀拉斯 张量流
2022-03-03 04:28:16

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

s={i=1nedi101d<0i=1nedi131d0
其中di=ypredytrue

y_都是向量ypredytrue

使用以下代码:

import keras.backend as 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

用于编译我的模型:

model.compile(loss='mse', optimizer='adam', metrics=[score])

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

raise TypeError("Using a tf.Tensoras a Python boolis not allowed." "使用if t is not None:而不是if t:测试是否定义了""张量,并使用TensorFlow ops如"

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

3个回答

我假设 y_true 和 y_pred 都是向量。您正在尝试对张量的值应用条件。该库告诉您这是不可能的(tf.Tensor as Python bool)。

您可能需要检查 tensorflow 控制流操作,例如tensorflow.equal

y_true并且y_pred都是代码中的张量。要么更改代码,使其成为 numpy 数组(我认为这可行),要么查看tf.cond,这应该允许您在张量上执行您正在寻找的操作。

def _loss_tensor_score(y_true, y_pred):
    y_error = y_pred - y_true
    bool_idx = K.greater(y_error, 0)
    loss1 = K.exp(-1*y_error/13) - 1 # greater 0
    loss2 = K.exp(y_error/10) - 1    # less 0
    loss = K.switch(bool_idx, loss2, loss1)
    return K.sum(loss)

也许你可以试试这段代码。

你在做什么?剩余使用寿命预测?