近期写课程作业,需要用Keras搭建网络层,跑实验时需要计算precision,recall和F1值,在前几年,Keras没有更新时,我用的代码是直接取训练期间的预测标签,然后和真实标签之间计算求解,代码是
from keras.callbacks import Callback
from sklearn.metrics import confusion_matrix, f1_score, precision_score, recall_scoreclass 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.validation_data[0]))).round()##.modelval_targ = self.validation_data[1]###.model_val_f1 = f1_score(val_targ, val_predict,average='micro')_val_recall = recall_score(val_targ, val_predict,average=None)###_val_precision = precision_score(val_targ, val_predict,average=None)###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))print("— val_f1: %f "%_val_f1)returnf1=Metrics()
hist=cnn_net.fit(x_train,y_train,batch_size=batch_size,epochs=35,verbose=1,validation_data=(x_train,y_train),callbacks=[f1])
需要使用时,将Metrics文件导入,调用函数,放置到model.fit( callbacks=[ f1 ] )中就可以计算了。
现在TensorFlow更新到2.2.0以上,Keras版本为2.4.3以上,上面那个函数就不太管用了,后来查资料找到了一个包,keras-metrics.
安装后,导入包 keras_metrics,将设置好的参数放置model.compile( metrics=[ km.f1score() ] )
import keras
import keras_metrics as kmmodel = models.Sequential()
model.add(keras.layers.Dense(1, activation="sigmoid", input_dim=2))
model.add(keras.layers.Dense(1, activation="softmax"))model.compile(optimizer="sgd",loss="binary_crossentropy",metrics=[km.f1_score(), km.binary_precision(), km.binary_recall()])
添加上之后,就可以计算评价值了。
![]()
















