【发布时间】: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 不同(由于我的模型训练得很好,我认为数据或训练没有任何问题,其评估方式有问题) here 和 here 已经发布了类似的问题,主要指向设置 shuffle=False 和重置生成器(我做了但没有解决问题)。
【问题讨论】:
-
我认为解决方案指向只是确保 Shuffle =false 和 workers =0 以便我们确保验证生成器完全相同。我已经确定了,我的预测结果仍然大不相同
标签: python keras computer-vision conv-neural-network