我编写了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)
答案 0 :(得分:0)
深入研究Keras问题后,我发现了这个问题。
这样做的原因是,当您使用健身时,在每批训练数据中,权重都会更新。拟合方法返回的损失值不是最终模型损失的平均值,而是每批使用的所有略有不同的模型的损失平均值。
另一方面,当您用于评估时,在整个数据集中使用相同的模型。而且该模型实际上甚至没有出现在拟合方法的损失中,因为即使在最后一批训练中,所计算的损失也将用于更新模型的权重。
总结起来,拟合和评估有两种完全不同的行为。
参考:-