Python 如何在使用fit_generator和evaluate_generator训练网络时绘制AUC和ROC?

Python 如何在使用fit_generator和evaluate_generator训练网络时绘制AUC和ROC?,python,tensorflow,scikit-learn,keras,Python,Tensorflow,Scikit Learn,Keras,我正在使用生成器对我的数据进行训练和预测分类。下面是一个例子 我的问题是,当我使用fit\u generator时,如何创建?我认为在这种情况下,最好的办法是将AUC定义为一个新指标。为此,您必须在tensorflow中定义度量(我假设您使用的是tensorflow后端) 我以前试验过的一种方法(但是,我不记得我测试过结果的正确性)是这样的: def as_keras_metric(method): """ This is taken from: https://stac

我正在使用生成器对我的数据进行训练和预测分类。下面是一个例子


我的问题是,当我使用
fit\u generator
时,如何创建?

我认为在这种情况下,最好的办法是将AUC定义为一个新指标。为此,您必须在tensorflow中定义度量(我假设您使用的是tensorflow后端)

我以前试验过的一种方法(但是,我不记得我测试过结果的正确性)是这样的:

def as_keras_metric(method):
    """
    This is taken from:
    https://stackoverflow.com/questions/45947351/how-to-use-tensorflow-metrics-in-keras/50527423#50527423
    """
    @functools.wraps(method)
    def wrapper(*args, **kwargs):
        """ Wrapper for turning tensorflow metrics into keras metrics """
        value, update_op = method(*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
然后在编译模型时定义度量:

model.compile(metrics=['accuracy', as_keras_metric(tf.metrics.auc)], optimizer='adam', loss='categorical_crossentropy')
虽然这会给出一些数字,但我还没有弄清楚它们是否正确。如果你能测试这一点,它给出了正确的结果,或没有,请让我知道,我会有兴趣找到

解决这个问题的第二种方法是使用并至少定义
on\u epoch\u end
函数,然后您可以从那里调用
sklearn
roc\u auc\u score
,然后打印或保存到日志中


但是,到目前为止我发现,您需要通过
\uuuu init\uuuu
向它提供训练数据,因此对于生成器,您需要确保回调的生成器提供的数据与模型的拟合生成器相同。另一方面,对于验证生成器,可以使用
self.validation\u data
从回调类访问它,这与提供给
fit\u生成器的验证数据相同

使用标准sklearn的roc和auc功能有什么问题?@Julien在使用生成器时我该怎么做?您尝试了什么?不确定问题出在哪里…@Julien,坦率地说,我不确定如何使用生成器使用
sklearn.metrics.roc\u auc\u score
。如何在回调函数中访问与模型拟合生成器相同的数据?我只是不知道细节。你能举个例子吗?谢谢
model.compile(metrics=['accuracy', as_keras_metric(tf.metrics.auc)], optimizer='adam', loss='categorical_crossentropy')