自定义指标Keras
我需要帮助在keras中创建自定义指标。我需要计算我的错误等于零的次数(y_pred-y_true=0) 我试过这个:自定义指标Keras,keras,metrics,Keras,Metrics,我需要帮助在keras中创建自定义指标。我需要计算我的错误等于零的次数(y_pred-y_true=0) 我试过这个: n_train = 1147 # Number of samples on training set c = 0 # Variable to count def our_metric(y_true, y_pred): if y_true-y_pred == 0: c += 1 return c/n_train 但我得到了一个错误: OperatorNotAll
n_train = 1147 # Number of samples on training set
c = 0 # Variable to count
def our_metric(y_true, y_pred):
if y_true-y_pred == 0:
c += 1
return c/n_train
但我得到了一个错误:
OperatorNotAllowedInGraphError:使用tf.Tensor
作为Pythonbool
在图形执行中不允许。使用急切的执行或装饰
此函数带有@tf.function
编辑:使用此处提出的解决方案:
我这样解决了我的问题:
c = tf.constant(0)
def our_metric(y_true, y_pred):
mask = K.equal(y_pred, y_true) # TRUE if y_pred = y_true
mask = K.cast(mask,K.floatx())
s = K.sum(mask)
return s/n_train
不能在纯
tensorflow
中运行Python比较(使用静态图)
您必须启用eager模式
,这是一个包装器,允许您使用一些Python控制语句(如if
或循环
)。只需根据错误建议修改函数,或在脚本开始时发出tf.enable\u eager\u execution()
您可能还希望更新代码以使用
tf2.0
,它更直观,默认情况下启用了“急切”模式。您不能在纯tensorflow
中运行Python比较(使用静态图)
您必须启用eager模式
,这是一个包装器,允许您使用一些Python控制语句(如if
或循环
)。只需根据错误建议修改函数,或在脚本开始时发出tf.enable\u eager\u execution()
您可能还希望更新代码以使用
tf2.0
,这更直观,并且默认情况下启用了“急切”模式。使用Keras后端函数计算值等于零的次数有多种方法。你只需要跳出框框思考一下。以下是一个例子:
diff = y_true - y_pred
count = K.sum(K.cast(K.equal(diff, K.zeros_like(diff)), 'int8'))
也可以使用
tf.count\u nonzero
操作,但是混合使用keras和显式tensorflow可能会导致问题。有许多方法可以使用keras后端函数来计算值等于零的次数。你只需要跳出框框思考一下。以下是一个例子:
diff = y_true - y_pred
count = K.sum(K.cast(K.equal(diff, K.zeros_like(diff)), 'int8'))
也可以使用
tf.count\u nonzero
操作,但混合keras和显式tensorflow可能会导致问题。这与精度度量完全相同我使用了此处提出的解决方案:这与精度度量完全相同我使用了此处提出的解决方案: