我正在 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
批处理进行一次。这也意味着单个时期的训练运行 500
次(即 8000/16 =500)
因此,我们采用 Epoch 1/50 输出中打印的训练准确度,在本例中为 0.9381
。我想知道0.9381
的训练精度是如何得出的。
是:
- 每批处理执行的平均训练准确度(取
500
次训练的平均值)是否正确?
或,
- 这是运行训练程序的
500
个实例中的最佳(或最大)训练准确度吗?
最佳答案
看一下 Keras
中的 BaseLogger
,他们正在其中计算运行平均值。
对于每个时期,准确度是该时期之前看到的所有批处理的平均值。
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
关于machine-learning - Keras 中每个时期的训练准确性是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48831242/