具有相同数据集的Keras中fit()和valuate()的准确性不同

时间:2019-03-11 07:54:28

标签: python keras

我编写了Keras的代码来训练GoogleNet。但是,从fit()获得的准确性是100%,但是在使用与validate()相同的训练数据集的情况下,准确性仍然只有25%,这是如此巨大的差异!!!而且,不像fit()那样,由validate()提供的准确性不会因训练更多时间而提高,这意味着它几乎保持在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

1 个答案:

答案 0 :(得分:0)

深入研究Keras问题后,我发现了这个问题。

这样做的原因是,当您使用健身时,在每批训练数据中,权重都会更新。拟合方法返回的损失值不是最终模型损失的平均值,而是每批使用的所有略有不同的模型的损失平均值。

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

总结起来,拟合和评估有两种完全不同的行为。

参考:-

  1. Keras_issues_thread
  2. Keras_official_doc