我编写 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 方法返回的损失值不是最终模型的损失均值,而是每批使用的所有略有不同的模型的损失均值。
另一方面,当您使用 进行评估时,对整个数据集使用相同的模型。而且这个模型实际上甚至没有出现在拟合方法的损失中,因为即使在最后一批训练中,计算出的损失也用于更新模型的权重。
总而言之,拟合和评估有两种完全不同的行为。
引用:-
关于python - 具有相同数据集的 Keras 中 fit() 和evaluate() 的不同精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55097362/