Keras的训练准确度如何确定每个时代?

时间:2018-02-16 16:41:35

标签: 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))

拟合输出如下:

enter image description here

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

,训练运行8000/16 =500)

因此,让我们考虑Epoch 1/50输出中打印的训练精度,在这种情况下为0.9381。我想知道0.9381的训练准确度是如何得出的。

是:

i) 平均值 培训准确度是否为每批次500次培训的平均值?

或,

ii)从培训程序运行的500个实例中获得最佳(或 max )训练准确度是什么?

1 个答案:

答案 0 :(得分:2)

查看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