当你这样做时
model.fit(train_dataset, validation_data=test_dataset, epochs=3)
这样,您使用train_dataset 训练模型,并使用test_dataset,在每个时期后评估您的模型。因此,在每个 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
但是,如果您执行以下操作,在model. fit 中没有使用test_dataset,您将只能通过以下方式获取训练日志。
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]
因此,当您在 model. fit 中使用 test_dataset 时,model. evaluate 将在 每个 epoch 之后使用此数据集,并为您提供每个 epoch 的验证分数,但如果您使用 @ 987654335@ 分别在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.