预测准确度较低,即 52%,而训练期间的训练和验证准确度约为 92%

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

我正在使用预训练的 VGG19 来训练模型。在训练时,我的准确率约为 92%(训练和验证)。

vgg19 = VGG19(input_shape=IMAGE_SIZE, weights='imagenet', include_top=False)
for layer in vgg19.layers:
    layer.trainable = False

x = Flatten()(vgg19.output)
prediction = Dense(len(folders), activation='softmax')(x)
model = Model(inputs=vgg19.input, outputs=prediction)

model.compile(loss='categorical_crossentropy',
  optimizer=tf.keras.optimizers.Adam(
    learning_rate=0.0005,
    name="Adam"),
  metrics=['accuracy']
)

r = model.fit_generator(
  training_set,
  validation_data=test_set,
  epochs=20,
  steps_per_epoch=len(training_set),
  validation_steps=len(test_set)
)

predictions = model.predict(test_set, steps = test_set.n // 31, verbose=1)

y_pred = []
for i in predictions:
  y_pred.append(int(np.argmax(i)))
y_pred = np.asarray(y_pred)

可以从这里查看训练时的准确性。Training and Validation Loss and Accuracy

但是,在预测时,我的准确率仅为 52.33%。

有人可以告诉我我在这里做错了什么吗? 谢谢!

python keras deep-learning
3个回答
0
投票

你的算法似乎缺乏泛化能力。原因之一可能是您用于训练的数据集的大小。更大的数据集,更好的泛化


0
投票

解决这个问题的方法是:

test_set = test_datagen.flow_from_directory('/content/drive/MyDrive/dataset/Test',
                                            target_size = (224, 224),
                                            batch_size = 32,
                                            class_mode = 'categorical',
                                            shuffle=False)

我没有在

shuffle=False
中添加
flow_from_directory
,默认情况下保留
shuffle=True
,这就是我在预测时准确性较低的原因。

我希望它能帮助任何犯同样错误的人!


0
投票

我也长期面临同样的问题。为了增加训练样本,我离线增加了数据。就我而言,我在 model.predict() 中传递模型在训练时已经看到的相同图像。我的训练集由增强图像 + 原始图像组成,但是当我检查原始图像的预测时,得到的预测准确度仅为 61%。我的模型性能如下。

0级: 精度:0.991 召回率:0.999 F1 分数:0.995

第一类: 精度:0.997 召回率:1.000 F1 分数:0.999

第二类: 精度:0.999 召回率:0.993 F1 分数:0.996

第3类: 精度:1.000 召回率:0.996 F1 分数:0.998

整体准确度:0.991 总损失:0.024

如果我使用训练中使用的相同图像,那么与验证集相比,model.predict 应该给出接近的准确度。为什么这么低?

任何立即回复将不胜感激!

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