【问题标题】:Log Keras metrics for each batch as per Keras example for the loss根据 Keras 示例记录每个批次的 Keras 指标以了解损失
【发布时间】:2019-05-29 06:48:21
【问题描述】:

在 Keras 文档中,有一个 example,其中创建了一个自定义回调来记录每个批次的 loss。这对我来说效果很好,但是我也想记录我添加的指标。

例如这段代码:

optimizer = Adam()
loss = losses.categorical_crossentropy
metric = ["accuracy"]

model.compile(optimizer=optimizer,
              loss=loss,
              metrics=metric)


class LossHistory(Callback):
    def on_train_begin(self, logs={}):
        self.losses = []

    def on_batch_end(self, batch, logs={}):
        self.losses.append(logs.get('loss'))

loss_history = LossHistory()

history = model.fit(training_data, training_labels,
                    batch_size=batch_size,
                    epochs=epochs,
                    verbose=2,
                    validation_data=(val_data, val_labels),
                    callbacks=[loss_history])

我不知道如何访问这些指标。

【问题讨论】:

  • 请注意,正如可能在链接的基本示例的最后部分中看到的那样,这不会返回每个批次的损失,而是该批次结束时的平均损失。例如,在第 3 批次中,将报告的损失是该批次的损失与前两次的平均值。

标签: python tensorflow keras loss


【解决方案1】:

指标历史存储在loss_history.losses

def on_batch_end(self, batch, logs={}):
  self.losses.append(logs.get('loss'))

此方法将在每批结束时被调用,并将损失指标附加到self.losses,因此一旦训练完成,您就可以直接使用loss_history.losses 访问此列表。

我还应该补充一点,如果您想包括准确性,例如,您还可以执行以下操作:

class LossHistory(Callback):
    def on_train_begin(self, logs={}):
        self.losses = []
        self.accuracy= []

    def on_batch_end(self, batch, logs={}):
        self.losses.append(logs.get('loss'))
        self.accuracy.append(logs.get('accuracy'))

然后随后访问它:

loss_history.accuracy

【讨论】:

  • 感谢您的快速回答,如果指标更像“tf.keras.losses.mape”怎么办?然后我可以用 logs.get(tf.keras.losses.mape) 做同样的事情吗?或者如何存储?
  • 只要将tf.keras.losses.mape 传递给指标数组中的model.compile(),您就可以使用logs.get('mape')
  • 或者如果你使用tf.keras.losses.mape 作为你的损失函数,那么你可以像以前一样使用logs.get('loss') 但(我认为)你的意思是作为一个附加指标,对吗?
  • 是的,我的意思是作为一个度量,例如度量 mape 和 loss mse,因为 mape 看起来很有趣,但对于损失函数来说并不理想。我现在试试这个并在你的帖子上打勾作为答案,非常感谢
  • logs.get("accuracy") 不起作用我认为它出于某种原因需要“acc”,将用它再试一次,以及“mape”。
猜你喜欢
  • 1970-01-01
  • 2021-12-02
  • 2017-01-10
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 2018-11-04
  • 2022-07-14
相关资源
最近更新 更多