验证准确率与来自 model.evaluate 的结果之间的差异

时间:2021-04-21 15:59:58

标签: tensorflow machine-learning keras deep-learning

我是深度学习的新手,我无法弄清楚您在每个时期结束时获得的验证准确度准确度之间的区别> 您可以通过使用 .org 0 start: ldi r16, 10 ldi r17, 20 ldi r18, 10 lsl r16 brvs OVERFLOW lsl r16 brvs OVERFLOW mov r20,r17 brvs OVERFLOW lsl r20 brvs OVERFLOW add r20,r17 brvs OVERFLOW add r20, r16 brvs OVERFLOW sub r20,r18 brvs OVERFLOW asr r20 brvs OVERFLOW asr r20 brvs OVERFLOW asr r20 brvs OVERFLOW brvc OK OVERFLOW: ldi r30, 0x11 OK: ldi r30, 0x11 konec: rjmp konec 方法获得。例如:

model.evaluate()

model.fit(train_dataset, validation_data=test_dataset, epochs=1)

这两个脚本会返回相同的准确度吗?

2 个答案:

答案 0 :(得分:1)

是的,两者将返回相同的结果,但是它们用于不同的目的。

通常您不会evaluate 验证集。相反,您将评估另一个集合 test_set,但是在您的情况下,您似乎只有一个火车和一个 test_dataset,因此这两种方法(.fit 中方法的最后一个时期)将输出相同的准确度。< /p>

validation_data 参数用于在模型训练时输出准确度/损失指标,让您了解模型如何随着时间的推移对它没有学习的数据进行学习调整模型权重,即“看不见的”数据。

但是,鉴于您查看这些结果并调整模型以尝试获得最佳验证准确度/损失,您引入了一定程度的偏差,因此您可能会对模型的执行方式产生过度乐观的印象在真正看不见的数据上 - 想想看,您正在针对非常具体的验证集进行优化,因此另一个数据集可能会给出不同的结果。

因此,将另一组 test_dataset 放在一边是有意义的,您尚未对其进行优化,但仍然希望能够说“我的模型提供了 X% 的准确度”或得到关于模型如何执行的一般性意见。这就是 model.evaluate 的用武之地,因为您可以使用它来查看准确度,而无需再次调用 model.fit

答案 1 :(得分:0)

当你这样做

model.fit(train_dataset, validation_data=test_dataset, epochs=3)

这样,您使用 train_dataset 训练模型,并使用 test_dataset 在每个 epoch 后评估您的模型。因此,在每个 epoch 之后,keras API 将调用 model. evaluate(test_dataset) 并以下列方式为您提供训练日志:

Epoch 1/3
20ms/step - loss: 0.494 - accuracy: 0.8904 - val_loss: 0.6392 - val_accuracy: 0.8841

Epoch 2/3
16ms/step - loss: 0.1594 - accuracy: 0.9204 - val_loss: 0.5392 - val_accuracy: 0.9041

Epoch 3/3
17ms/step - loss: 0.0594 - accuracy: 0.9904 - val_loss: 0.2392 - val_accuracy: 0.9741

但是,如果您按以下方式进行操作,在 test_dataset 中没有使用 model. fit,那么您将仅通过以下方式获得训练日志。

model.fit(train_dataset, epochs=1)

Epoch 1/3
20ms/step - loss: 0.494 - accuracy: 0.8904 
    
Epoch 2/3
16ms/step - loss: 0.1594 - accuracy: 0.9204 

Epoch 3/3
17ms/step - loss: 0.0594 - accuracy: 0.9904 

在完成所有 epoch 后,当您执行以下操作时,它会一次性评估您的模型(与之前的 3 次不同)并给出最后的验证分数。

loss, scores = model.evaluate(test_dataset)
[0.2392, 0.9741]

因此,当您在 test_dataset 中使用 model. fit 时,此数据集将在 每个 epoch 之后由 model. evaluate 使用,并为您提供每个epoch 但如果您在 test_dataset 中单独使用 model. evaluate,它只会计算一次。另注意,在最后的训练日志中,验证分数在您稍后计算时是相同的。

model.fit(..., test_dataset)
Epoch 3/3
    17ms/step - ... val_loss: 0.2392 - val_accuracy: 0.9741

----

loss, scores = model.evaluate(test_dataset)
[0.2392, 0.9741]

看我的另一个答案,它可能会给你更多的见识。 Splitting data to training, testing, and valuation.