代码之家  ›  专栏  ›  技术社区  ›  user567879

在tfhub重新训练脚本中计算F1分数、精度和召回率

  •  2
  • user567879  · 技术社区  · 7 年前

    我使用tensorflow hub进行图像再训练分类任务。tensorflow脚本 retrain.py 默认情况下,计算交叉熵和精度。

    train_accuracy, cross_entropy_value = sess.run([evaluation_step, cross_entropy],feed_dict={bottleneck_input: train_bottlenecks, ground_truth_input: train_ground_truth})
    

    我想得到F1分数,精度,回忆和混淆矩阵。如何使用此脚本获取这些值?

    1 回复  |  直到 7 年前
        1
  •  5
  •   abhuse    7 年前

    下面我提供了一个使用 scikit学习

    您可以使用 precision_recall_fscore_support confusion_matrix 方法:

    from sklearn.metrics import precision_recall_fscore_support, confusion_matrix
    

    这两种方法都采用了两个一维数组对象,分别存储地面真值和预测标签。

    train_ground_truth 行中定义的变量 1054 和 1060 validation_ground_truth 1087 .

    计算预测类标签的张量由 add_evaluation_step 功能。可以修改线条 1034

    evaluation_step, prediction = add_evaluation_step(final_tensor, ground_truth_input)
    # now prediction stores the tensor object that 
    # calculates predicted class labels
    

    1076 为了评估 prediction sess.run() :

    train_accuracy, cross_entropy_value, train_predictions = sess.run(
        [evaluation_step, cross_entropy, prediction],
        feed_dict={bottleneck_input: train_bottlenecks,
                   ground_truth_input: train_ground_truth})
    
    # train_predictions now stores class labels predicted by model
    
    # calculate precision, recall and F1 score
    (train_precision,
     train_recall,
     train_f1_score, _) = precision_recall_fscore_support(y_true=train_ground_truth,
                                                          y_pred=train_predictions,
                                                          average='micro')
    # calculate confusion matrix
    train_confusion_matrix = confusion_matrix(y_true=train_ground_truth,
                                              y_pred=train_predictions)
    

    类似地,您可以通过修改行来计算验证子集的度量 1095 :

    validation_summary, validation_accuracy, validation_predictions = sess.run(
        [merged, evaluation_step, prediction],
        feed_dict={bottleneck_input: validation_bottlenecks,
                   ground_truth_input: validation_ground_truth})
    
    # validation_predictions now stores class labels predicted by model
    
    # calculate precision, recall and F1 score
    (validation_precision,
     validation_recall,
     validation_f1_score, _) = precision_recall_fscore_support(y_true=validation_ground_truth,
                                                               y_pred=validation_predictions,
                                                               average='micro')
    # calculate confusion matrix
    validation_confusion_matrix = confusion_matrix(y_true=validation_ground_truth,
                                                   y_pred=validation_predictions)
    

    run_final_eval 根据测试数据评估训练模型。在这个函数中, 预测 test_ground_truth 已定义,因此您只需包含代码即可计算所需的度量:

    test_accuracy, predictions = eval_session.run(
        [evaluation_step, prediction],
        feed_dict={
            bottleneck_input: test_bottlenecks,
            ground_truth_input: test_ground_truth
        })
    
    # calculate precision, recall and F1 score
    (test_precision,
     test_recall,
     test_f1_score, _) = precision_recall_fscore_support(y_true=test_ground_truth,
                                                         y_pred=predictions,
                                                         average='micro')
    # calculate confusion matrix
    test_confusion_matrix = confusion_matrix(y_true=test_ground_truth,
                                             y_pred=predictions)
    

    全球的 average='micro' . scikit学习包支持的不同平均方法如中所述 User Guide .