1

我想在一张图像上展示不同数据增强(随机缩放、旋转和平移)的效果。我从 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) 这就是我无法绘制它的原因。为什么尺寸会这样,我该怎么办?

4

2 回答 2

1

datagen.flow()实际上从 中返回(增强的)批次x_train,它不会影响x_train就地。你需要这样做:

x_batch = datagen.flow(x_train)[0]
img = x_batch[0] / 255
plt.imshow(img)
plt.show()
于 2019-06-21T20:57:48.010 回答
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()
于 2019-06-22T08:27:38.573 回答