【问题标题】:How is the training accuracy in Keras determined for every epoch?Keras 中每个 epoch 的训练精度是如何确定的?
【发布时间】:2018-07-27 15:02:22
【问题描述】:

我正在 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 的训练精度是如何得出的。

是不是:

  1. mean 训练准确度是否为每批执行的500 次训练的平均值?

或,

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

【问题讨论】:

    标签: machine-learning deep-learning keras


    【解决方案1】:

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

    【讨论】:

    • 所以训练准确率是基于所有批次的平均值。感谢您的确认,我也想知道是否也对所有批次的验证数据进行了验证准确性的平均值。请使用ONE MORE QUESTION查看对我的帖子的编辑
    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 2018-10-12
    • 2016-12-31
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多