首页 > 解决方案 > keras tensorflow2 获取训练数据的结果

问题描述

在 keras 中,我们可以使用fit命令训练模型,然后使用predict.

Dcnn=model.fit(x_train, y_train, epochs=5, batch_size=32)
model.predict(test_dataset,verbose=True)

当我们使用fit方法时,我们得到的准确度结果如下。假设在 5 个 epoch 之后,我们在训练数据上获得了 98.62% 的准确率。现在,如果我们使用model.predict(x_train,verbose=True)拟合方法的结果,我们是否会为每个观察获得完全相同的准确度和完全相同的预测?如果不是,为什么?

Epoch 5/5
61/61 - 11s - loss: 0.0320 - tp: 1602.0000 - fp: 18.0000 - tn: 321.0000 - fn: 9.0000 - accuracy: 0.9862 

更新1

我更新了如下命令 Dcnn.fit(train_dataset, epochs=NB_EPOCHS, verbose=2,validation_data=test_dataset)

我得到了以下结果

Epoch 5/5

61/61 - 11s - loss: 0.0320 - tp: 1602.0000 - fp: 18.0000 - tn: 321.0000 - fn: 9.0000 - accuracy: 0.9862 - precision: 0.9889 - recall: 0.9944 - auc: 0.9990 - val_loss: 0.9760 - val_tp: 161.0000 - val_fp: 22.0000 - val_tn: 9.0000 - val_fn: 0.0000e+00 - val_accuracy: 0.8854 - val_precision: 0.8798 - val_recall: 1.0000 - val_auc: 0.7169

现在,如果我尝试model.predict(test_dataset,verbose=True),我会得到 88.54% 的准确率 - 与 fit 方法的输出相同。

如果我跑步model.predict(train_dataset,verbose=True),我会得到 98.62% 的准确率吗?如果不是,那为什么?

标签: tensorflowkeraspredict

解决方案


调用fit()模型时仍在训练,结果不准确。predict()由于模型已完成训练,因此调用是准确的。

您看不到使用fit. 这是由于在每批之后根据概率更改权重。这意味着从一个批次到另一个批次你有不同的权重,因此即使在相同的数据上也会给出不同的答案。

为了获得真实的概率,您可以使用predict(). 预测和拟合不会返回相同的概率,因为predict整个集合的返回值fit是所有批次的平均值(批次之间的权重不同)。

此外,您可能会感到困惑,调用model.fit()返回一个 History 对象,其中包含损失和准确性等值。调用Dcnn.predict()会出错,因为 History 对象没有“预测”属性。model.predict()应该用来得到预测,而预测又可以用来计算概率。

模型的权重保存在实例本身中,这样在调用后fit()权重会由模型自动更改和保存。


推荐阅读