【问题标题】:Keras F1 score metrics for training the model用于训练模型的 Keras F1 分数指标
【发布时间】:2019-02-22 22:03:05
【问题描述】:

我是 keras 的新手,我想以 F1 分数作为我的指标来训练模型。

我遇到了两件事,一是我可以添加回调,另一个是使用内置的指标函数 Here,表示不会使用度量函数来训练模型。那么,这是否意味着在编译模型时我可以在 metrics 参数中做任何事情? 具体来说,

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

在上述情况下,即使准确率作为指标传递,它也不会用于训练模型。

第二件事是使用这里定义的回调,

import numpy as np
from keras.callbacks import Callback
from sklearn.metrics import confusion_matrix, f1_score, precision_score, recall_score
class Metrics(Callback):
def on_train_begin(self, logs={}):
 self.val_f1s = []
 self.val_recalls = []
 self.val_precisions = []

def on_epoch_end(self, epoch, logs={}):
 val_predict = (np.asarray(self.model.predict(self.model.validation_data[0]))).round()
 val_targ = self.model.validation_data[1]
 _val_f1 = f1_score(val_targ, val_predict)
 _val_recall = recall_score(val_targ, val_predict)
 _val_precision = precision_score(val_targ, val_predict)
 self.val_f1s.append(_val_f1)
 self.val_recalls.append(_val_recall)
 self.val_precisions.append(_val_precision)
 print “ — val_f1: %f — val_precision: %f — val_recall %f” %(_val_f1, _val_precision, _val_recall)
 return

metrics = Metrics()

然后拟合模型,

model.fit(training_data, training_target, 
 validation_data=(validation_data, validation_target),
 nb_epoch=10,
 batch_size=64,
 callbacks=[metrics])

我不确定这是否会在 f1 分数上训练模型。

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

    您无法训练具有 f1 分数的神经网络。为了在训练期间反向传播错误,您需要某种函数来告诉您,您的预测与预期值相差多远。这样的函数以 MSE 损失为例。

    另一方面,F1 分数只是样本中准确率和召回率之间的调和平均值。它没有告诉您,您必须在哪个方向更新权重才能获得更好的模型。它也不会告诉您,您的预测与预期值相差多远。

    您可以做的是在每个 epoch 之后打印 F1 分数。一个关于如何做到这一点的例子can be found in this blogpost

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2020-08-25
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2018-01-30
      • 1970-01-01
      • 2018-08-18
      相关资源
      最近更新 更多