Эффект увеличения данных изображения CIFAR-10 Keras только для одного изображения - PullRequest
1 голос
/ 21 июня 2019

Я хочу показать эффект различного увеличения данных (случайное масштабирование, вращение и перемещение) только на одном изображении. Я строю первое изображение из 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 ]

1 голос
/ 22 июня 2019

Спасибо 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()
1 голос
/ 21 июня 2019

datagen.flow() на самом деле возвращает (дополненные) партии из x_train, это не влияет на x_train на месте.Вам нужно сделать это так:

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