我在Keras中训练模型如下:
model.fit(Xtrn, ytrn batch_size=16, epochs=50, verbose=1, shuffle=True, callbacks=[model_checkpoint], validation_data=(Xval, yval))
拟合输出如下所示:
如model.fit
所示,我的批量大小为16,总共有8000
个训练样本,如输出所示。因此,根据我的理解,训练每16
个批次进行一次。这也意味着在一个epoch中,训练会运行500
次(即,8000/16 = 500
)。
那么,让我们来看一下输出中Epoch 1/50的训练准确率,在这种情况下是0.9381
。我想知道这个0.9381
的训练准确率是如何得出的。
它是:
- 是每次批次训练
500
次的平均训练准确率吗?
还是,
- 是从
500
次训练过程中得出的最佳(或最大)训练准确率吗?
回答:
查看Keras
中的BaseLogger
,他们在计算一个正在运行的平均值。对于每个epoch,准确率是该epoch中之前看到的所有批次的平均值。
class BaseLogger(Callback): """Callback that accumulates epoch averages of metrics. This callback is automatically applied to every Keras model. """ def on_epoch_begin(self, epoch, logs=None): self.seen = 0 self.totals = {} def on_batch_end(self, batch, logs=None): logs = logs or {} batch_size = logs.get('size', 0) self.seen += batch_size for k, v in logs.items(): if k in self.totals: self.totals[k] += v * batch_size else: self.totals[k] = v * batch_size def on_epoch_end(self, epoch, logs=None): if logs is not None: for k in self.params['metrics']: if k in self.totals: # Make value available to next callbacks. logs[k] = self.totals[k] / self.seen