【问题标题】:Predict_generator giving same output value for all images (CNN- regression)Predict_generator 为所有图像提供相同的输出值(CNN-回归)
【发布时间】:2020-10-27 16:32:12
【问题描述】:

我正在使用 CNN 进行图像回归。我目前正在 4K 图像上测试我的模型,但计划扩展到 12K 图像。我的代码与 Keras test_train_split 完美配合。 我正在尝试使用 ImageDataGenerator 让我可以轻松地将图像加载到内存中。

train_generator = datagen.flow_from_dataframe(dataframe= df,
                                          directory='ImageChips_Group1',
                                          x_col='EB_ID',
                                          y_col='TOT_P',
                                          subset = 'training',
                                          target_size = (img_height, img_width),
                                          seed=42,
                                          batch_size= Batch_size,
                                          shuffle= False,
                                          pickle_safe = True, 
                                          workers=1,
                                          class_mode='raw')


validation_generator = datagen.flow_from_dataframe(dataframe= df,
                                          directory='ImageChips_Group1',
                                          x_col='EB_ID',
                                          y_col='TOT_P',
                                          subset ='validation',
                                          target_size = (img_height, img_width),
                                          seed=42,
                                          batch_size= Batch_size,
                                          shuffle= False,
                                          pickle_safe = True, 
                                          workers=1,
                                          class_mode='raw')

我使用 fit_generator 的最佳成绩是 loss: 39.3873 - val_loss: 20.0538 (MAE),因为我使用 Callbacks 来存储我希望我的评估和预测函数具有相似结果的最佳模型。

ValScore = saved_model.evaluate_generator(validation_generator, 
                                          steps = validation_generator.n,
                                          verbose =1,
                                         )
print("Test set Accuracy = ", ValScore )

TrainScore = saved_model.evaluate_generator(train_generator, 
                                            steps = train_generator.n,
                                           verbose =1,
                                            )
print("Train set Accuracy = ", TrainScore)

但是,使用评估我在 val 和测试集上分别得到 28.9% 和 50.8%。 此外,我使用 predict_generator 得到更差的结果

 validation_generator.reset()  
 y_predict =saved_model.predict_generator(validation_generator,
                                            steps = validation_generator.n//validation_generator.batch_size +1,
                                            verbose=1)

我发现我的预测只是重复相同的数字。我还使用 validation_generator.labels 计算了 MAE,得到了 39.51%。我不明白为什么这与 evaluate_generator 不同(由于我的模型训练得很好,我认为数据或训练没有任何问题,其评估方式有问题) herehere 已经发布了类似的问题,主要指向设置 shuffle=False 和重置生成器(我做了但没有解决问题)。

【问题讨论】:

  • 我认为解决方案指向只是确保 Shuffle =false 和 workers =0 以便我们确保验证生成器完全相同。我已经确定了,我的预测结果仍然大不相同

标签: python keras computer-vision conv-neural-network


【解决方案1】:

也可能是这个问题很难学习。我已经有了这个,实际上在每批 6 小时的相同输出之后(这是因为“平均”答案最容易将损失最小化),网络终于开始学习:

我计划做一些事情来让学习更早发生:

  1. 学习率的变化
  2. 使用网络早期的功能

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2018-01-13
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2017-07-25
    • 2022-10-04
    • 2021-01-03
    相关资源
    最近更新 更多