【发布时间】:2017-11-10 12:14:43
【问题描述】:
我正在使用 Keras 的 ImageDataGenerator 类,将我的样本加载到神经网络中以解决二元分类问题。
没有。 +ve 训练图像 = 5000,-ve 训练图像 = 5000。类似地,+ve 验证图像 = 5000 和 -ve 验证图像 = 5000。我的批量大小是 64。
我的问题是,当我使用以下代码加载数据和训练时,我的准确率徘徊在 65-67% 左右。但是,如果我设置 shuffle = False,它会在 2-3 个 epoch 后徘徊在 98-100% 左右。
为什么会有如此大的性能提升,洗牌是如何发挥作用的?
另外,我注意到,从 flow_from_directory 生成的每个批次都包含完全来自任何一个类的图像。将正样本和负样本放在一个批次中是否有助于更真实地衡量准确性?
# data augmentation configuration we will use for training
train_datagen = ImageDataGenerator(preprocessing_function=HPF)
# data augmentation configuration we will use for testing
test_datagen = ImageDataGenerator(preprocessing_function=HPF)
# generator, for train data
train_generator = train_datagen.flow_from_directory(
'./data/train', # this is the target directory
target_size=(512, 512), # all images will be resized to 512x512
batch_size=batch_size,
color_mode='grayscale',
shuffle=True,
class_mode='binary') # since we use binary_crossentropy loss, we need binary labels
# this is a similar generator, for validation data
validation_generator = test_datagen.flow_from_directory(
'./data/validation',
target_size=(512, 512),
color_mode='grayscale',
batch_size=batch_size,
shuffle=True,
class_mode='binary')
Shuffle = True 实际上是做什么的?由于每批中的图像仍然要么全部为正面,要么全部为负面。
可以使用以下代码打印批次:
for i in train_generator:
idx = (train_generator.batch_index - 1) * train_generator.batch_size
print(train_generator.filenames[idx : idx + train_generator.batch_size])
【问题讨论】:
-
你的班级不平衡吗?您的数据集中有多少个
0s 和1s? -
我的课很平衡。 1 和 0 的数量相等。
标签: tensorflow deep-learning keras