每批样品的损耗

  • 本文关键字: keras
  • 更新时间 :
  • 英文 :


如何在训练时获得样本损失而不是总损失?损耗历史记录提供了总批次损耗,但不提供单个样品的损耗。

如果可能的话,我想要这样的东西:

on_batch_end(batch, logs, **sample_losses**)

这样的东西是可用的,如果没有,你能提供一些提示如何改变代码来支持这个吗?

据我所知,不可能通过回调获得此信息,因为一旦调用回调,损失已经计算出来了(看看keras/engine/training.py)。为了简单地检查损失,你可以覆盖损失函数,例如:

def myloss(ytrue, ypred):
    x = keras.objectives.mean_squared_error(ytrue, ypred)
    return theano.printing.Print('loss for each sample')(x)
model.compile(loss=myloss)

实际上这可以使用回调来完成。这已经包含在关于回调的keras文档中。像这样定义你自己的回调

class LossHistory(keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self.losses = []
    def on_batch_end(self, batch, logs={}):
        self.losses.append(logs.get('loss'))

然后传递这个回调给你的模型。您应该将每批损失添加到历史记录对象中。

我也没有在Keras API中发现任何可以返回单个样本损失的现有函数,同时仍然在小批量上进行计算。看来你必须破解keras,或者直接访问tensorflow图。

设置批处理大小为1,并在模型中使用回调。评估或手动计算预测(model.predict)与真实值之间的损失

相关内容

  • 没有找到相关文章

最新更新