CIFAR-10 Keras图像数据增强效果仅适用于一幅图像

时间:2019-06-21 20:53:39

标签: tensorflow keras data-augmentation

我想在一张图像上显示不同数据增强(随机缩放,旋转和平移)的效果。我从x_train绘制了第一张图像,但是第二张图似乎没有任何变化。

我猜我错误地使用了datagen.flow,请提出建议。谢谢。

from matplotlib import pyplot as plt
from tensorflow.python.keras.datasets import cifar10
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator

(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x1=x_train[0]
print(x1.shape)
plt.imshow(x1)
plt.show()

# set up image augmentation
datagen = ImageDataGenerator(
    rotation_range=180, # Randomly rotate by degrees
    width_shift_range=0.2,  # For translating image vertically
    height_shift_range=0.2, # For translating image horizontally
    horizontal_flip=True,
    rescale=None,
    fill_mode='nearest'
)
datagen.fit(x_train)


# see example augmentation images
x_batch = datagen.flow(x_train)
x2=x_batch[0]
print(x2.shape)

x2的输出形状为(32、32、32、3),这就是为什么我无法绘制它的原因。为什么会有这样的尺寸,我该怎么办?

2 个答案:

答案 0 :(得分:1)

datagen.flow()实际上返回来自x_train的(增强的)批次,它不会对x_train就地产生影响。您需要这样做:

x_batch = datagen.flow(x_train)[0]
img = x_batch[0] / 255
plt.imshow(img)
plt.show()

答案 1 :(得分:1)

感谢Djib2011的建议。我发现它是因为该函数默认情况下会随机播放图像,因此我们可以设置shuffle = false来保留索引。

x_batch = datagen.flow(x_train,shuffle=False)[0]
print(x_batch.shape)
x2=x_batch[0]
plt.imshow((x2.astype(np.uint8)))
plt.show()