【发布时间】: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