我正在使用Keras训练一个模型,仅训练一个周期:
history = model.fit([x], y, validation_split=0.2, epochs=1, batch_size=2)print(history.history['accuracy'])
显然,现在的历史记录中只有周期结束时的一个值。我如何在周期内评估训练的准确率或损失?我希望这些值是在训练过程中控制台显示的值。
明确一点:我希望在每个批次后(而不是像通常那样在每个周期后)记录历史。
回答:
我假设您想在每个批次结束时保存准确率和损失。为此,您需要创建一个自定义回调,如下所示:
class BCP(keras.callbacks.Callback): batch_accuracy = [] # 给定批次的准确率 batch_loss = [] # 给定批次的损失 def __init__(self): super(BCP,self).__init__() def on_train_batch_end(self, batch, logs=None): BCP.batch_accuracy.append(logs.get('accuracy')) BCP.batch_loss.append(logs.get('loss'))
现在在model.fit中包含
callbacks = [BCP()]
然后训练一个周期。在周期结束时,每个批次的准确率和损失值将存储在BCP.batch_accuracy和BCP.batch_loss中。您可以按如下方式打印它们:
print('{0:^4s}{1:^22s}{2:^10s}'.format('Batch', 'Loss', 'Accuracy'))for i in range (len(BCP.batch_accuracy)): print('{0:^4s}{1:15.5f}{2:15.2f}'.format(str(i), BCP.batch_loss[i], BCP.batch_accuracy[i]* 100))