Keras F1评分指标用于训练模型

时间:2019-02-22 13:19:10

标签: python tensorflow keras deep-learning

我对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分数上训练模型。

1 个答案:

答案 0 :(得分:0)

您不能用f1分数训练神经网络。为了在训练过程中向后传播错误,您需要某种函数来告诉您预测与期望值之间的距离。这样的功能就是MSE损失的例子。

另一方面,

F1分数只是精度与样本召回率之间的谐波平均值。它没有告诉您,必须朝哪个方向更新权重才能获得更好的模型。它也不会告诉您预测与预期值之间的距离。

您可以做的是在每个纪元后打印F1分数。有关如何执行此操作的示例can be found in this blogpost