imagedatagen.flow_from_directory() - 随机测试集预测?
imagedatagen.flow_from_directory() - random test set predictions?
我通过 ImageDataGenerator()
为 CNN 二元分类问题加载我的训练集和测试集,如下所示:
datagen_train = ImageDataGenerator(validation_split=0.2, zoom_range = 0.2, width_shift_range=0.1, height_shift_range=0.1, horizontal_flip = True,
datagen_test = ImageDataGenerator()
train_it = cnn2_datagen.flow_from_directory(TRAIN_FOLDER, class_mode='binary', batch_size=32, target_size=(150,150), subset='training')
val_it = cnn2_datagen.flow_from_directory(TRAIN_FOLDER, class_mode='binary', batch_size=32, target_size=(150,150), subset='validation')
test_it = cnn2_datagen_test.flow_from_directory(TEST_FOLDER, class_mode='binary', batch_size=32, target_size=(150,150))
然后我创建我的模型并在其上拟合训练和验证数据集。之后,使用 model.evaluate(test_it)
returns 准确率为 88%。然而,问题出现在使用 model.predict(test_it)
时,即使我使用完全相同的测试集,输出预测总是不同的顺序!例如:
y_pred = model.predict(test_it)
print(y_pred)
[0, 0, 1, 1]
然后我再次 运行 相同的代码块, model.predict(test_it)
的结果是 [1, 0, 0, 1]
。这种情况每次都会发生,而不会更改我的代码中的任何内容并阻止我创建混淆矩阵,因为我无法将测试集中每个数据点的真实标签与 y_pred 进行比较,因为它是不同的预测顺序.
任何关于为什么会发生这种情况的建议将不胜感激。
在 flow_from_directory 中为 test_it 代码设置 suffle=False
我通过 ImageDataGenerator()
为 CNN 二元分类问题加载我的训练集和测试集,如下所示:
datagen_train = ImageDataGenerator(validation_split=0.2, zoom_range = 0.2, width_shift_range=0.1, height_shift_range=0.1, horizontal_flip = True,
datagen_test = ImageDataGenerator()
train_it = cnn2_datagen.flow_from_directory(TRAIN_FOLDER, class_mode='binary', batch_size=32, target_size=(150,150), subset='training')
val_it = cnn2_datagen.flow_from_directory(TRAIN_FOLDER, class_mode='binary', batch_size=32, target_size=(150,150), subset='validation')
test_it = cnn2_datagen_test.flow_from_directory(TEST_FOLDER, class_mode='binary', batch_size=32, target_size=(150,150))
然后我创建我的模型并在其上拟合训练和验证数据集。之后,使用 model.evaluate(test_it)
returns 准确率为 88%。然而,问题出现在使用 model.predict(test_it)
时,即使我使用完全相同的测试集,输出预测总是不同的顺序!例如:
y_pred = model.predict(test_it)
print(y_pred)
[0, 0, 1, 1]
然后我再次 运行 相同的代码块, model.predict(test_it)
的结果是 [1, 0, 0, 1]
。这种情况每次都会发生,而不会更改我的代码中的任何内容并阻止我创建混淆矩阵,因为我无法将测试集中每个数据点的真实标签与 y_pred 进行比较,因为它是不同的预测顺序.
任何关于为什么会发生这种情况的建议将不胜感激。
在 flow_from_directory 中为 test_it 代码设置 suffle=False