我编写 Keras 的代码来训练 GoogleNet。然而,fit() 得到的准确率是 100%,而使用evaluate() 相同的训练数据集,准确率仍然只有25%,差异如此巨大!!!此外,evaluate() 的准确率与 fit() 不同,训练次数不会提高,这意味着它几乎保持在 25%。

有没有人知道这种情况有什么问题?

# Training Dataset and labels r given. Here load GoogleNet model
from keras.models import load_model
model = load_model('FT_InceptionV3.h5')
# Training Phase
model.fit(x=X_train,
              y=y_train,
              batch_size=5,
              epochs=20,
              validation_split=0,
              #callbacks=[tensorboard]
             )

#Testing Phase
train_loss , train_acc=model.evaluate(X_train, y_train, verbose=1)
print("Train loss=",train_loss,"Train accuracy",train_acc)

Training Result

Testing Result

最佳答案

在深入研究 Keras 问题后,我发现了这一点。

这样做的原因是当你使用 fit 时, 在每批训练数据上更新权重。 fit 方法返回的损失值不是最终模型的损失均值,而是每批使用的所有略有不同的模型的损失均值。

另一方面,当您使用 进行评估时,对整个数据集使用相同的模型。而且这个模型实际上甚至没有出现在拟合方法的损失中,因为即使在最后一批训练中,计算出的损失也用于更新模型的权重。

总而言之,拟合和评估有两种完全不同的行为。

引用:-

  • Keras_issues_thread
  • Keras_official_doc
  • 关于python - 具有相同数据集的 Keras 中 fit() 和evaluate() 的不同精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55097362/

    10-12 19:08