如何使用Keras模型的F1分数?

dok*_*ndr 10 python keras

出于某种原因,我在尝试使用Keras模型指定f1分数时收到错误消息:

model.compile(optimizer='adam', loss='mse', metrics=['accuracy', 'f1_score'])
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ValueError: Unknown metric function:f1_score
Run Code Online (Sandbox Code Playgroud)

在我使用'model.compile'的同一文件中提供'f1_score'函数之后:

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 

model.compile(optimizer='adam', loss='mse', metrics=['accuracy', f1_score])
Run Code Online (Sandbox Code Playgroud)

模型编译好,可以保存到文件中:

model.save(model_path) # works ok
Run Code Online (Sandbox Code Playgroud)

然后将其加载到另一个程序中,:

from keras import models 
model = models.load_model(model_path)
Run Code Online (Sandbox Code Playgroud)

失败并出现错误:

ValueError: Unknown metric function:f1_score
Run Code Online (Sandbox Code Playgroud)

这次在同一个文件中指定'f1_score'没有帮助,Keras没有看到它.怎么了?如何使用Keras模型的F1分数?

Tho*_*lut 9

加载模型时,必须将该指标作为custom_objects包的一部分提供.

试试这样:

from keras import models 
model = models.load_model(model_path, custom_objects= {'f1_score': f1_score})
Run Code Online (Sandbox Code Playgroud)

f1_score你通过的功能在哪里compile.