我正在 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%。 模型准确度 模型损失
你的损失非常高,你最好在训练模型之前冻结顶层。