带有样本权重的 keras 自定义指标

我正在尝试在 Keras 中定义一个考虑样本权重的自定义指标。拟合模型时,我使用的样本权重如下:


training_history = model.fit(

        train_data,

        train_labels,

        sample_weight = train_weights,

        epochs = num_epochs,

        batch_size = 128,

        validation_data = (validation_data, validatation_labels, validation_weights ),

    )

我使用的自定义指标的一个例子是 AUC(roc 曲线下的面积),我定义如下:


from keras import backend as K

import tensorflow as tf


def auc(true_labels, predictions, weights = None):

    auc = tf.metrics.auc(true_labels, predictions, weights = weights)[1]

    K.get_session().run(tf.local_variables_initializer())

    return auc

我在编译模型时使用这个指标:


model.compile(

        optimizer = optimizer,

        loss = 'binary_crossentropy',

        metrics = ['accuracy', auc]

    )

但据我所知,该指标没有考虑样本权重。事实上,我通过将使用上面定义的自定义度量训练模型时看到的度量值与我通过模型输出和样本权重计算得到的值进行比较来验证这一点,这确实产生了非常不同的结果。我将如何定义上面显示的 auc 指标以考虑样本权重?


翻过高山走不出你
浏览 266回答 1
1回答

有只小跳蛙

您可以使用另一个sample_weights作为参数的函数来包装您的指标:def auc(weights):    def metric(true_labels, predictions):        auc = tf.metrics.auc(true_labels, predictions, weights=weights)[1]        K.get_session().run(tf.local_variables_initializer())        return auc    return metric然后定义一个额外的输入占位符来接收样本权重:sample_weights = Input(shape=(1,))然后可以按如下方式编译您的模型:model.compile(    optimizer = optimizer,    loss = 'binary_crossentropy',    metrics = ['accuracy', auc(sample_weights)])注意:未经测试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python