【问题标题】:How to set keras custom metrics to only be called at the end of epoch?如何将 keras 自定义指标设置为仅在纪元结束时调用?
【发布时间】:2019-02-12 04:39:04
【问题描述】:

我正在尝试为我的神经网络使用自定义指标,并且该指标只能在 epoch 结束时进行评估。我遇到的问题是在每批中评估指标,这不是想要的行为。请注意,我使用的是生成器,fit_generator 使用的是 keras。

validation_data 加载有实现keras.utils.Sequence的生成器

class DataGenerator(keras.utils.Sequence): 
   def __init__(self, inputs, labels, batch_size):
    self.inputs = inputs
    self.labels = labels
    self.batch_size = batch_size

   def __getitem__(self, index):
    #some processing done here
    return batch_inputs, batch_labels

   def __len__(self):
    return int(np.floor(len(self.inputs) / self.batch_size))

我尝试实现 keras 文档的建议,但我没有找到任何信息来指定仅应在 epoch 结束时使用的指标。​​

def auc_roc(y_true, y_pred):
   auc, up_opt = tf.metrics.auc(y_true, y_pred)
   K.get_session().run(tf.local_variables_initializer())
   with tf.control_dependencies([up_opt]):
       auc = tf.identity(auc)
   return auc

所以现在auc_roc 在每批之后被调用,而不是在epoch 结束时单独调用。

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:
    from sklearn.metrics import roc_auc_score
    from keras.callbacks import Callback
    
    class IntervalEvaluation(Callback):
        def __init__(self, validation_data=(), interval=10):
            super(Callback, self).__init__()
    
            self.interval = interval
            self.X_val, self.y_val = validation_data
    
        def on_epoch_end(self, epoch, logs={}):
            if epoch % self.interval == 0:
                y_pred = self.model.predict_proba(self.X_val, verbose=0)
                score = roc_auc_score(self.y_val, y_pred)
                print("interval evaluation - epoch: {:d} - score: {:.6f}".format(epoch, score))
    

    用法:

    ival = IntervalEvaluation(validation_data=(x_test2, y_test2), interval=1)
    

    更多信息: http://digital-thinking.de/keras-three-ways-to-use-custom-validation-metrics-in-keras/

    【讨论】:

    • 看来配合fitGenerator使用起来要困难得多
    • 所以我想在我的情况下,我还需要在每批期间保留 auc_roc
    • 我将它与 fit_generator 一起使用,它也有效。你试过了吗?
    • 是的,但由于我的 validation_data 是一个实现 keras.utils.Sequence 的生成器,我很难检索数据
    • 我使用用于验证数据的生成器架构编辑了我的帖子
    猜你喜欢
    • 2019-03-23
    • 2021-02-14
    • 2021-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多