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