验证准确率与model.evaluate结果之间的区别

我是深度学习的新手,我无法理解在每个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]

请查看我的其他回答,可能会给你更多见解。 将数据分成训练、测试和验证集。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注