Keras 每批次的验证损失和准确度指标会生成一个“无”列表

问题描述 投票:0回答:2

我目前正在尝试获取每批次的损失和准确性,以用于我的 Keras 模型的训练和验证。我已经成功地进行了损失和准确性训练,但是在尝试获得验证损失和准确性的等效项时遇到了问题。

我的工作基于这个 query 并针对我的应用程序稍微调整了代码。 issue 是我刚刚收到“无”值列表。

我创建了自己的 LossHistory 类,如下所示。我希望能够获得每个批次的指标,然后是每个时期。

class LossHistory(keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self.history = {'loss':[],'val_loss':[], 'accuracy':[],'val_accuracy':[], 'loss_avg':[],'val_loss_avg':[], 'accuracy_avg':[],'val_accuracy_avg':[]}

    def on_batch_end(self, batch, logs={}):
        self.history['loss'].append(logs.get('loss'))
        self.history['val_loss'].append(logs.get('val_loss'))
        self.history['accuracy'].append(logs.get('accuracy'))
        self.history['val_accuracy'].append(logs.get('val_accuracy'))

    def on_epoch_end(self, epoch, logs={}):
        self.history['loss_avg'].append(logs.get('loss'))
        self.history['val_loss_avg'].append(logs.get('val_loss'))
        self.history['accuracy_avg'].append(logs.get('accuracy'))
        self.history['val_accuracy_avg'].append(logs.get('val_accuracy'))

我仍然可以得到验证损失和准确性的平均值。换句话说,每个时期之后的验证指标。我只是无法获得每批次的这些指标。

有人知道为什么会这样吗?我试着查看关于 customer callbacks 的 Keras 文档,但找不到关于验证指标的任何信息。

不确定我是否遗漏了任何明显的东西。

tensorflow validation keras callback
2个回答
0
投票

验证损失和指标在每个时期结束时进行评估,没有 Keras 计算的每批次验证损失和指标。


0
投票

API不支持,但你仍然可以做到。下面是一个伪代码。如果时间允许,我会尝试放一个更干净的版本。

def on_batch_end(self, batch, logs={}):
     if batch%10 == 0: # Better dont evaluate for all Batch
        #pred = model.predict(Validation_X)
        #loss = computeLoss(pred,Validation_Y)
        #logs.set('BatchLoss',loss)

我不确定,self.model 是否可以访问。

© www.soinside.com 2019 - 2024. All rights reserved.