tensorflow - 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% 的准确率吗?如果不是,那为什么?
解决方案
调用fit()
模型时仍在训练,结果不准确。predict()
由于模型已完成训练,因此调用是准确的。
您看不到使用fit
. 这是由于在每批之后根据概率更改权重。这意味着从一个批次到另一个批次你有不同的权重,因此即使在相同的数据上也会给出不同的答案。
为了获得真实的概率,您可以使用predict()
. 预测和拟合不会返回相同的概率,因为predict
整个集合的返回值fit
是所有批次的平均值(批次之间的权重不同)。
此外,您可能会感到困惑,调用model.fit()
返回一个 History 对象,其中包含损失和准确性等值。调用Dcnn.predict()
会出错,因为 History 对象没有“预测”属性。model.predict()
应该用来得到预测,而预测又可以用来计算概率。
模型的权重保存在实例本身中,这样在调用后fit()
权重会由模型自动更改和保存。
推荐阅读
- java - 构建项目时缺少课程。exoplayer、ImageIO、BufferedImage
- javascript - 无法从“权限”读取“查询”属性:未启用异步剪贴板标志
- c - 如何在不挂父亲的情况下检索子进程的状态?
- python - 从转储数据中排除 admin.logenty
- adafruit-circuitpython - 在键盘矩阵上使用 adafruit_debouncer
- azure - 从 Azure Function 向 RabbitMQ Docker 容器发送消息
- python - 对另一列python中的每个类别执行多个groupby
- python - 如何从 txt 文件中获取写入的数据
- title - 使flexdashboard的标题变粗?
- typescript - 基于泛型上下文中的泛型参数重命名对象属性