2017-04-11 51 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

你能幫我嗎? –