Keras-批次内每个样品的损失

时间:2016-10-07 06:13:02

标签: keras

如何在训练时获得样本损失而不是全部损失?损失历史可用于总批次损失,但不会为单个样品提供损失。

如果可能,我希望有这样的事情:

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

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

4 个答案:

答案 0 :(得分:2)

据我所知,不可能通过回调获取此信息,因为一旦调用回调就已经计算了损失(看看INSERT INTO relational (class_id, teacher_id, student_id) SELECT id,1,1 FROM (SELECT `id`, (`name` = "John Smith") as exact_score, (`name` RLIKE "[[:<:]]John Smith[[:>:]]") as reg_score, (MATCH (`name`) AGAINST ("John Smith")) as match_score FROM `teachers` WHERE (`title` RLIKE "[[:<:]]John Smith[[:>:]]" || MATCH (`title`) AGAINST ("John Smith")) ORDER BY CASE WHEN exact_score = 1 THEN exact_score END DESC, CASE WHEN reg_score > 1 THEN reg_score END DESC, CASE WHEN reg_score = 0 AND exact_score = 0 THEN match_score END DESC) AS t1; )。要简单地检查损失,您可以覆盖损失函数,例如:

keras/engine/training.py

答案 1 :(得分:0)

实际上这可以使用回调来完成。这现在包含在回调的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'))

然后将此回调传递给您的模型。您应该将每批损失附加到历史记录ojbect。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

将批次大小设置为1并在模型中使用回调。评估或手动计算预测(model.predict)与基本事实之间的损失。