When using mectrics in model.compile in keras, report ValueError: ('Unknown metric function', ':f1score')

When using mectrics in model.compile in keras, report ValueError: ('Unknown metric function', ':f1score')

我正在尝试 运行 一个 LSTM,当我使用下面的代码时:

model.compile(optimizer='rmsprop', loss='binary_crossentropy',
              metrics=['accuracy', 'f1score', 'precision', 'recall'])

它returns:

ValueError: ('Unknown metric function', ':f1score').

我进行了搜索并找到了这个 url: https://github.com/fchollet/keras/issues/5400

这个url中"model.compile"部分的"metrics"和我的完全一样,没有返回错误

我怀疑您正在使用 Keras 2.X。如 https://keras.io/metrics/ 中所述,您可以创建自定义指标。这些指标似乎只采用 (y_true, y_pred) 作为函数参数,因此不可能实现 fbeta 的通用化。

这里是f1_score基于keras 1.2.2源码的实现。

import keras.backend as K

def f1_score(y_true, y_pred):

    # Count positive samples.
    c1 = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
    c2 = K.sum(K.round(K.clip(y_pred, 0, 1)))
    c3 = K.sum(K.round(K.clip(y_true, 0, 1)))

    # If there are no true samples, fix the F1 score at 0.
    if c3 == 0:
        return 0

    # How many selected items are relevant?
    precision = c1 / c2

    # How many relevant items are selected?
    recall = c1 / c3

    # Calculate f1_score
    f1_score = 2 * (precision * recall) / (precision + recall)
    return f1_score

要使用,只需在定义自定义指标后编译模型时将 f1_score 添加到指标列表即可。例如:

model.compile(loss='categorical_crossentropy',
              optimizer='adam', 
              metrics=['accuracy',f1_score])

K.epsilon() 在此代码中运行良好。您可以在 c1、c2 和 c3 的定义中使用它。