我是深度学习的新手,我无法理解在每个epoch结束时获得的验证准确率和使用model.evaluate()
方法获得的准确率之间的区别。例如:
model.fit(train_dataset, validation_data=test_dataset, epochs=1)
和
model.fit(train_dataset, epochs=1)loss, scores = model.evaluate(test_dataset)
这两个脚本返回的准确率会相同吗?
回答:
当你执行
model.fit(train_dataset, validation_data=test_dataset, epochs=3)
这样,你就是用train_dataset
训练模型,并且用test_dataset
在每个epoch之后评估你的模型。因此,每个epoch之后,keras
API 会调用model.evaluate(test_dataset)
,并以如下方式给你训练日志:
Epoch 1/320ms/step - loss: 0.494 - accuracy: 0.8904 - val_loss: 0.6392 - val_accuracy: 0.8841Epoch 2/316ms/step - loss: 0.1594 - accuracy: 0.9204 - val_loss: 0.5392 - val_accuracy: 0.9041Epoch 3/317ms/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/320ms/step - loss: 0.494 - accuracy: 0.8904 Epoch 2/316ms/step - loss: 0.1594 - accuracy: 0.9204 Epoch 3/317ms/step - loss: 0.0594 - accuracy: 0.9904
在完成所有epoch后,当你按照以下方式操作时,它将一次性评估你的模型(不像之前的三次),并给你最后的验证分数。
loss, scores = model.evaluate(test_dataset)[0.2392, 0.9741]
所以,当你在model.fit
中使用test_dataset
时,这个数据集将在每个epoch之后被model.evaluate
使用,并为每个epoch提供验证分数,但如果你在model.evaluate
中单独使用test_dataset
,它将只计算一次。还要注意,在最后的训练日志中,验证分数与稍后计算的相同。
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]
请查看我的其他回答,可能会给你更多见解。 将数据分成训练、测试和验证集。