Keras TensorBoard显示错误的召回/精度指标

2024-05-28 20:23:04 发布

您现在位置:Python中文网/ 问答频道 /正文

这个想法是建立一个具有良好指标的TensorBoard来跟踪我的模型培训和评估模型性能。然而,大多数指标似乎不正确(尤其是精确度/召回率/假阴性计数),我使用的是tfv1.8.0。在

为了创建指标,我使用以下代码的和平性:

def as_keras_metric(method, **kwargs):
    @functools.wraps(method)
    def wrapper(self, args):
        """ Wrapper for turning tensorflow metrics into keras metrics """
        value, update_op = method(self, args, **kwargs)
        tf.keras.backend.get_session().run(tf.local_variables_initializer())
        with tf.control_dependencies([update_op]):
            value = tf.identity(value)
        return value
    return wrapper


def create_metrics():
    auc_roc = as_keras_metric(tf.metrics.auc)
    recall = as_keras_metric(tf.metrics.recall)
    precision = as_keras_metric(tf.metrics.precision)

    fn = as_keras_metric(tf.metrics.false_negatives)
    fp = as_keras_metric(tf.metrics.false_positives)

    kwargs = {'specificity': 0.95}
    sensitivity_at_specificity = as_keras_metric(tf.metrics.sensitivity_at_specificity, **kwargs)

    mean_per_class_accuracy = as_keras_metric(tf.metrics.mean_per_class_accuracy, **{'num_classes': 2})

    return [fn, fp, auc_roc, recall, precision, sensitivity_at_specificity, mean_per_class_accuracy, tf.keras.metrics.binary_accuracy]

我使用以下方法编译模型:

^{pr2}$

适合使用

model.fit_generator(generator=KerasSequence)

现在问题是:

我的数据是不平衡的,我有大约2%的观察属于+ve类。让我们看看最后几个时代。在

Epoch 16/50 6/7 [========================>.....] - ETA: 0s - loss: 5.9874 - auc: 0.9171 - recall: 1.0000 - precision: 0.0068 - sensitivity_at_specificity: 0.8050 - mean_per_class_accuracy: 0.5000 - false_negatives: 0.0000e+00 - false_positives: 13570.6667 - binary_accuracy: 1.0000

Epoch 50/50 6/7 [========================>.....] - ETA: 0s - loss: 0.0205 - auc: 0.9207 - recall: 1.0000 - precision: 0.0069 - sensitivity_at_specificity: 0.8494 - mean_per_class_accuracy: 0.5000 - false_negatives: 0.0000e+00 - false_positives: 43821.6667 - binary_accuracy: 1.0000

我知道500个样本中有6个被预测为+ve类。所以我不明白怎么可能有这些指标。它们相互排斥。回忆1和精度如此之低。这意味着我实际上预测所有观察值为1,而实际上只有5/500被预测为+ve类。另外,怎么可能在43000时得到false_positive计数。。。当我只有500个训练样本的时候。它在每一个时代都在成长

截图

enter image description here

损失为0(过拟合),但假阳性计数每历元增加。。。为什么?有趣的是,在第一个时期之后,假阳性计数为200。这让我意识到指标在纪元结束后不会重新设置并继续添加。在


Tags: falsetfasmean指标metricatprecision

热门问题