2017-04-11 188 views
2

我试图运行LSTM,当我使用下面的代码:当model.compile在keras使用mectrics,报告ValueError异常:( '未知的度量功能', ':f1score')

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

它返回:

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

我已经做了我的搜索,发现这个网址: https://github.com/fchollet/keras/issues/5400

在此URL中的“model.compile”部分的“指标”是完全一样的矿,并没有e返回错误。

+0

什么是你Keras版本(你可以用'keras .__ version__'检查)? f1score在Keras 2中不可用,你需要自己创建它(一个好的开始就是查看1.2.2代码:https://github.com/fchollet/keras/blob/1.2.2 /keras/metrics.py) –

回答

4

我怀疑你使用的是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]) 
+0

非常感谢!我已将您的代码添加到我的项目中,但f1_score的输出始终为nan,我不知道如何处理它,您能帮助我吗? –

+0

'model.compile(optimizer ='rmsprop',loss ='binary_crossentropy', metrics = ['accuracy',metric_def.f1_score])' –

+0

你能帮我吗? –