我编写 Keras 代码来训练 GoogleNet。然而,fit() 得到的准确率是 100%,而用同样的训练数据集 evaluate() ,准确率只有 25%,差距如此之大!此外,与 fit() 不同,evaluate() 的准确率不会因训练次数而提高,这意味着它几乎保持在 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)
Run Code Online (Sandbox Code Playgroud)
在深入研究 Keras 问题后,我发现了这一点。
这样做的原因是,当您使用 fit 时,每批训练数据的权重都会更新。fit方法返回的损失值不是最终模型损失的均值,而是每个批次上使用的所有略有不同的模型的损失的均值。
另一方面,当您用于评估时,会在整个数据集上使用相同的模型。该模型实际上甚至没有出现在拟合方法的损失中,因为即使在最后一批训练中,计算出的损失也用于更新模型的权重。
总而言之,拟合和评估有两种完全不同的行为。
参考:-
| 归档时间: |
|
| 查看次数: |
1531 次 |
| 最近记录: |