gpt4 book ai didi

python - 在神经网络中 : accuracy improvement after each epoch is GREATER than accuracy improvement after each batch. 为什么?

转载 作者:太空狗 更新时间:2023-10-30 02:08:18 27 4
gpt4 key购买 nike

我正在使用 Keras 2.0 包为 Python 训练一个批处理的神经网络。以下是有关数据和训练参数的一些信息:

  • #samples in train: 414934
  • #features: 590093
  • #classes: 2(二分类问题)
  • 批量大小:1024
  • #batches = 406 (414934/1024 = 405.2)

以下是以下代码的一些日志:

for i in range(epochs):
print("train_model:: starting epoch {0}/{1}".format(i + 1, epochs))
model.fit_generator(generator=batch_generator(data_train, target_train, batch_size),
steps_per_epoch=num_of_batches,
epochs=1,
verbose=1)

(部分)日志:

train_model:: starting epoch 1/3                                                            
Epoch 1/1
1/406 [..............................] - ETA: 11726s - loss: 0.7993 - acc: 0.5996
2/406 [..............................] - ETA: 11237s - loss: 0.7260 - acc: 0.6587
3/406 [..............................] - ETA: 14136s - loss: 0.6619 - acc: 0.7279
404/406 [============================>.] - ETA: 53s - loss: 0.3542 - acc: 0.8917
405/406 [============================>.] - ETA: 26s - loss: 0.3541 - acc: 0.8917
406/406 [==============================] - 10798s - loss: 0.3539 - acc: 0.8918
train_model:: starting epoch 2/3
Epoch 1/1
1/406 [..............................] - ETA: 15158s - loss: 0.2152 - acc: 0.9424
2/406 [..............................] - ETA: 14774s - loss: 0.2109 - acc: 0.9419
3/406 [..............................] - ETA: 16132s - loss: 0.2097 - acc: 0.9408
404/406 [============================>.] - ETA: 64s - loss: 0.2225 - acc: 0.9329
405/406 [============================>.] - ETA: 32s - loss: 0.2225 - acc: 0.9329
406/406 [==============================] - 13127s - loss: 0.2225 - acc: 0.9329
train_model:: starting epoch 3/3
Epoch 1/1
1/406 [..............................] - ETA: 22631s - loss: 0.1145 - acc: 0.9756
2/406 [..............................] - ETA: 24469s - loss: 0.1220 - acc: 0.9688
3/406 [..............................] - ETA: 23475s - loss: 0.1202 - acc: 0.9691
404/406 [============================>.] - ETA: 60s - loss: 0.1006 - acc: 0.9745
405/406 [============================>.] - ETA: 31s - loss: 0.1006 - acc: 0.9745
406/406 [==============================] - 11147s - loss: 0.1006 - acc: 0.9745

我的问题是:在像这样提高准确性的每个纪元之后会发生什么?例如,第一个纪元结束时的精度为 0.8918,但在第二个纪元开始时观察到的精度为 0.9424。类似地,第二个 epoch 结束时的精度为 0.9329,但第三个 epoch 开始时的精度为 0.9756。

我希望在第二个纪元开始时找到 ~0.8918 的精度,在第三个纪元开始时找到 ~0.9329 的精度。

我知道在每批批处理中的训练样本有一次正向传播和一次反向传播。因此,在每个时期所有训练样本都有一次前向传播和一次反向传播。

此外,来自 Keras documentation :

Epoch:任意截止值,通常定义为“对整个数据集进行一次传递”,用于将训练分成不同的阶段,这对于记录和定期评估很有用。

为什么每个 epoch 内的精度提升小于 epoch X 结束到 epoch X+1 开始之间的精度提升?

最佳答案

这与您的模型或数据集无关;这种“跳跃”的原因在于指标在 Keras 中的计算和显示方式。

随着 Keras 处理一批又一批,它会保存每个批处理的准确度,它向您显示的不是最新处理的批处理的准确度,而是当前 epoch 中所有批处理的平均值。而且,随着模型的训练,连续批处理的准确度往往会提高。

现在考虑:假设在第一个时期有 50 个批处理,在这 50 个批处理中网络从 0% 变为 90%。然后在纪元结束时,Keras 将显示例如的准确性。 (0 + 0.1 + 0.5 + ... + 90)/50%,显然远小于 90%!但是,因为你的实际精度是 90%,第二个 epoch 的第一批将显示 90%,给人一种质量突然“跳跃”的印象。显然,loss 或任何其他指标也是如此。

现在,如果您想要对准确性、损失或任何其他您可能会使用的指标进行更现实和可信的计算,我建议您在 model.fit[_generator] 中使用 validation_data 参数] 提供验证数据,这些数据不会用于训练,而只会在每个 epoch 结束时用于评估网络,而不会对各个时间点进行平均。

关于python - 在神经网络中 : accuracy improvement after each epoch is GREATER than accuracy improvement after each batch. 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44130892/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com