如何在训练时获得样本损失而不是全部损失?损失历史可用于总批次损失,但不会为单个样品提供损失。
如果可能,我希望有这样的事情:
on_batch_end(batch, logs, **sample_losses**)
这样的东西是否可用,如果没有,你能提供一些提示,如何更改代码来支持这个吗?
答案 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)与基本事实之间的损失。