在keras中的model.compile中使用mectrics时,报告ValueError :(' Unknown metric function',':f1score')

时间:2017-04-11 12:27:19

标签: keras metrics

我试图运行LSTM,当我使用下面的代码时:

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

它返回:

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

我已完成搜索并找到此网址: https://github.com/fchollet/keras/issues/5400

"指标"在" model.compile"此网址中的部分与我的完全相同,并且不会返回任何错误。

2 个答案:

答案 0 :(得分:7)

我怀疑你使用的是Keras 2.X.如https://keras.io/metrics/中所述,您可以创建自定义指标。这些度量标准似乎仅将(y_true, y_pred)作为函数参数,因此无法实现fbeta的通用实现。

以下是基于keras 1.2.2源代码的f1_score实现。

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])

答案 1 :(得分:0)

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