如何在Keras训练周期内获取当前批次的预测结果?
获取训练批次的错误预测样本用于难负样本挖掘
这问题我之前做分类任务搞难样本挖掘时也碰到过,其实有两种实用的实现方式,你可以根据自己的需求选:
方式一:简洁直接,基于predict_on_batch
这种方式不需要改动原有训练逻辑太多,核心思路是先让模型对当前批次做预测,找出错误样本后再执行训练(或者先训练再预测,取决于你想要的是训练前还是训练后的预测结果,通常难样本挖掘用训练前的预测结果更合理)。
代码示例(分类任务为例)
假设你的输入x是当前批次数据,y是one-hot编码的标签:
import numpy as np # 1. 获取模型对当前批次的预测结果 batch_predictions = model.predict_on_batch(x) # 2. 把预测结果和真实标签转换成类别索引 pred_labels = np.argmax(batch_predictions, axis=1) true_labels = np.argmax(y, axis=1) # 3. 筛选出预测错误的样本索引 wrong_idx = np.where(pred_labels != true_labels)[0] # 4. 提取错误样本 hard_x = x[wrong_idx] hard_y = y[wrong_idx] # 5. 保存难样本——可以用numpy的savez方便后续加载 # 首次保存 np.savez("hard_samples.npz", x=hard_x, y=hard_y) # 后续批次追加的话,可以这样写: # try: # existing = np.load("hard_samples.npz") # updated_x = np.concatenate([existing["x"], hard_x], axis=0) # updated_y = np.concatenate([existing["y"], hard_y], axis=0) # np.savez("hard_samples.npz", x=updated_x, y=updated_y) # except FileNotFoundError: # np.savez("hard_samples.npz", x=hard_x, y=hard_y) # 6. 执行当前批次的训练 _loss, _acc = model.train_on_batch(x, y)
如果你的y已经是类别索引(不是one-hot),那第2步的true_labels直接用y就行,不用np.argmax。
方式二:更高效,自定义训练步骤
上面的方式会做两次前向传播(一次predict_on_batch,一次train_on_batch),如果你的批次数据很大,会有点浪费算力。这时候可以用tf.GradientTape手动实现训练步骤,一次前向传播同时拿到预测结果、计算损失并更新权重:
代码示例
import tensorflow as tf # 自定义训练函数 def custom_train_step(x, y): with tf.GradientTape() as tape: # 一次前向传播得到预测结果 predictions = model(x, training=True) # 计算损失(用模型编译时定义的损失函数) loss = model.compiled_loss(y, predictions) # 计算梯度并更新模型权重 gradients = tape.gradient(loss, model.trainable_variables) model.optimizer.apply_gradients(zip(gradients, model.trainable_variables)) # 更新准确率指标 model.compiled_metrics[0].update_state(y, predictions) acc = model.compiled_metrics[0].result() return loss, acc, predictions # 在训练循环中调用 _loss, _acc, batch_predictions = custom_train_step(x, y) # 后续处理预测结果、筛选保存难样本的逻辑和方式一一样 # ...
后续难样本挖掘的使用建议
积累了一定数量的难样本后,你可以:
- 每次训练时混合一定比例的难样本和普通样本,提升模型对难例的识别能力;
- 定期单独用难样本训练几个epoch,针对性优化;
- 结合样本的预测置信度(比如预测概率很低但分类错误的样本),进一步筛选更有价值的难样本。
内容的提问来源于stack exchange,提问作者Brans
相关产品推荐
相关产品推荐

