如何在 tf.keras 中不使用 sklearn 的情况下计算宏 f1 分数

How to calculate macro f1-score without using sklearn in tf.keras

提问人:buzz bowlekar 提问时间:2/23/2023 最后编辑:buzz bowlekar 更新时间:2/23/2023 访问量:75

问:

我必须在tf.keras中计算宏f1分数,条件是,不要使用sklearn

我试过了,但没有得到输出

首先,我尝试根据测试数据进行计算

class Metrics(tf.keras.callbacks.Callback):
  def __init__(self,train_data,val_data):
    self.train_data = train_data
    self.validation_data = val_data
  
  def on_train_begin(self,logs={}):
    self.f1_score_test = []
    #self.f1_score_train = []
  
  def on_epoch_end(self,epoch,logs={}):
    y_pred_test = (np.asarray(self.model.predict(self.validation_data[0]))).round()
    y_true_test = self.validation_data[1]
    def f1(y_true_test, y_pred_test):
      TP = np.sum(np.multiply([i==True for i in y_pred_test], y_true_test))
      TN = np.sum(np.multiply([i==False for i in y_pred_test], [not(j) for j in y_true_test]))
      FP = np.sum(np.multiply([i==True for i in y_pred_test], [not(j) for j in y_true_test]))
      FN = np.sum(np.multiply([i==False for i in y_pred_test], y_true_test))
      precision = TP/(TP+FP)
      recall = TP/(TP+FN)
      if precision != 0 and recall != 0:
        f1 = (2 * precision * recall) / (precision + recall)
      else:
        f1 = 0
      return f1

    def f1_macro(y_true_test, y_pred_test):  
      macro = []
      for i in np.unique(y_true_test):
        modified_true = [i==j for j in y_true_test]
        modified_pred = [i==j for j in y_pred_test]
        F1_score_test = f1(modified_true, modified_pred)

      self.f1_score_test.append(F1_score_test)
      #self.f1_score_train.append(F1_score_train) 

      print('f1_test = {}:'.format(F1_score_test))
new_metrics = Metrics((x_train,y_train),(x_test,y_test))
python 函数 回调 tf.keras

评论

0赞 buzz bowlekar 2/23/2023
这是我对所有观众的谦卑请求,请尝试解决上述问题,谢谢
0赞 Balázs Patai 2/23/2023
这个 stackoverflow 问题对你有帮助吗?stackoverflow.com/questions/64860091/......
0赞 buzz bowlekar 2/23/2023
是的,但我也必须使用 tf.keras
0赞 buzz bowlekar 2/23/2023
我想要每个 epoch 的宏 f1score,因此我必须使用 on_epoch_end
0赞 buzz bowlekar 2/23/2023
我是初学者,也来自非核心背景......请帮助我,因为这对你们中的许多人来说都是直截了当的问题

答: 暂无答案