从头开始训练的 Keras Xception 在历史上给出了 ~100% 的准确率,但在评估时只预测 1,给出了 50% 的准确率

问题描述 投票:0回答:1

我正在 keras 上训练 Xception 模型,而没有使用预先训练的权重来解决二元分类问题,我得到了一个非常奇怪的行为。历史图显示训练准确率一直在增加,直到达到 100%,而验证准确率始终在 50% 左右,因此看起来似乎过度拟合,但事实并非如此,因为我检查过,它总是预测(接近)1 甚至在训练集上。

此行为的原因可能是什么?

这是我用来训练的代码。

x_train_xception
已被
keras.applications.xception.preprocess_input
函数预处理。

除了模型创建之外,我使用相同的代码来训练预训练的 Xception 模型,效果很好

inLayerX = Input((512, 512, 4))
xceptionModel = keras.applications.Xception(include_top = True, weights=None, input_tensor=inLayerX, classes=1, classifier_activation= 'sigmoid')

xceptionModel.compile(loss= 'binary_crossentropy', metrics = ['accuracy'])

history = xceptionModel.fit(x_train_xception, y_train, batch_size= batch_size, epochs= epochs, validation_data=(x_val_xception, y_val))

_, accTest = xceptionModel.evaluate(x_test_xception, y_test)
_, accVal = xceptionModel.evaluate(x_val_xception, y_val)
_, accTrain = xceptionModel.evaluate(x_train_xception, y_train)
print("Training accuracy {:.2%}".format(accTrain))
print("Validation accuracy {:.2%}".format(accVal))
print("Test accuracy {:.2%}".format(accTest))

哪个输出:

2/2 [==============================] - 6s 2s/step - loss: 1.2063 - accuracy: 0.5000
1/1 [==============================] - 4s 4s/step - loss: 1.2960 - accuracy: 0.4667
4/4 [==============================] - 5s 1s/step - loss: 1.2025 - accuracy: 0.5083
Training accuracy 50.83%
Validation accuracy 46.67%
Test accuracy 50.00%

验证和测试的准确性是预期的,但真正困扰我的是训练准确性,从历史记录来看,我希望训练准确性接近 100%。 模型准确度 模型损失

python tensorflow machine-learning keras deep-learning
1个回答
0
投票

你的损失非常高,你最好在训练模型之前冻结顶层。

© www.soinside.com 2019 - 2024. All rights reserved.