我正在用Keras训练ResNet18。如下所示,我使用ModelCheckPoint来保存基于验证准确性的最佳模型。
model = ResNet18(2)
model.build(input_shape = (None,128,128,3))
model.summary()
model.save_weights('./Adam_resnet18_original.hdf5')
opt = tf.keras.optimizers.Adam(learning_rate=0.001)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
mcp_save = ModelCheckpoint('Adam_resnet18_weights.hdf5', save_best_only=True, monitor='val_accuracy', mode='max')
batch_size = 128
model.fit(generator(batch_size, x_train, y_train), steps_per_epoch = len(x_train) // batch_size, validation_data = generator(batch_size, x_valid, y_valid), validation_steps = len(x_valid) // batch_size, callbacks=[mcp_save], epochs = 300)如下图所示,在培训过程中,验证的准确性可提高到0.8281。训练史
然而,当我使用最后的模型来获得下面代码的最终验证精度时,我得到的精度只有0.78109。有人能告诉我这里有什么问题吗?非常感谢!
model.load_weights('Adam_resnet18_weights.hdf5')
predictions_validation = model.predict(generator(batch_size, x_valid, y_valid), steps = len(x_valid) // batch_size + 1)
predictions_validation_label = np.argmax(predictions_validation, axis=1)
Y_valid_label = np.argmax(Y_valid, axis=1)
accuracy_validation_conventional = accuracy_score(Y_valid_label, predictions_validation_label[:len(Y_valid_label)])
print(f'Accuracy on the validation set: {accuracy_validation_conventional}')发布于 2022-04-25 03:27:54
这里最大的线索是,在过去的几个年代中,精度保持在1.000。从这一点看,这一模式似乎过于合适。对过度拟合的直观理解就像一个学生一次又一次地进行完全相同的测试,以至于他们只记住每个问题的答案,而无法适应措辞上的微小变化。网络已经“记忆”了训练数据,但无法适应测试数据。
找出最好的方法有点棘手,因为我不知道您正在处理的数据集的大小或模型的细节。我假设dataset是相当大的(如果不是,请尝试数据增强),并且您已经定义了一个多层网络(如果您从Keras导入这个模型,您的选择可能会更有限)。不过,以下是一些建议:
一个更全面的解释和其他建议可以找到这里。希望这能帮上忙!
https://stackoverflow.com/questions/71993936
复制相似问题