代码之家  ›  专栏  ›  技术社区  ›  dokondr

如何将F1分数与Keras模型结合使用?

  •  12
  • dokondr  · 技术社区  · 7 年前

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

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

    我发现这个错误:

    ValueError: Unknown metric function:f1_score
    

    在我使用“model”的同一个文件中提供“f1\u 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])
    

    model.save(model_path) # works ok
    

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

    from keras import models 
    model = models.load_model(model_path)
    

    3 回复  |  直到 7 年前
        1
  •  11
  •   Thomas Jungblut    7 年前

    加载模型时,必须提供该指标作为 custom_objects 纸袋

    试着这样做:

    from keras import models 
    model = models.load_model(model_path, custom_objects= {'f1_score': f1_score})
    

    f1_score 是你通过的函数 compile .

        2
  •  1
  •   ochs.tobi    6 年前

    f1_score 为了工作,我不得不换工作 y_true y_pred 在函数声明中。 K = keras.backend

        3
  •  0
  •   malkhk    4 年前

    metrics=['accuracy', f1_score]
    

    metrics=[f1_score]