Keras 的训练准确率是如何确定每个 epoch 的?

use*_*121 6 machine-learning deep-learning keras

我在 Keras 中训练模型如下:

model.fit(Xtrn, ytrn batch_size=16, epochs=50, verbose=1, shuffle=True,
          callbacks=[model_checkpoint], validation_data=(Xval, yval))
Run Code Online (Sandbox Code Playgroud)

拟合输出如下所示:

在此处输入图片说明

如图所示,model.fit我的批量大小为 16,8000训练样本总数如输出所示。因此,根据我的理解,每16批次都会进行培训。这也意味着训练是500单个时期的运行时间(即,8000/16 =500)

因此,让我们采用 Epoch 1/50 输出中打印的训练准确度,在本例中为0.9381。我想知道这个训练精度是如何0.9381导出的。

是不是:

  1. 平均训练精度,作为平均从500次培训,每批执行?

或者,

  1. 它是运行训练过程的实例中的最佳(或最大)训练准确度500吗?

gid*_*dim 7

看看他们计算运行平均值的BaseLogger地方。Keras对于每个时期,准确度是该时期之前看到的所有批次的平均值。

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
Run Code Online (Sandbox Code Playgroud)