Keras ImageDataGenerator: проблема с данными и формой метки - PullRequest
0 голосов
/ 02 января 2019

Я хотел создать больше изображений, используя Keras, как вы можете видеть в здесь , используя этот код (почти такой же, как source> Random Rotations ):

# Random Rotations
from keras.datasets import mnist
from keras.preprocessing.image import ImageDataGenerator
from matplotlib import pyplot
from keras import backend as K
datagen = ImageDataGenerator(rotation_range=90)
# fit parameters from data
datagen.fit(cats["images"])

print(np.asarray(cats["label"]).shape)  #output=(12464,)
print(np.asarray(cats["images"]).shape) #output=(12464, 60, 60, 1)

# configure batch size and retrieve one batch of images
for X_batch, y_batch in datagen.flow(cats["images"], cats["label"], batch_size=9):
    # create a grid of 3x3 images
    for i in range(0, 9):
        pyplot.subplot(330 + 1 + i)
        pyplot.imshow(X_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray'))
    # show the plot
    pyplot.show()
    break

Но я получаю следующую ошибку:

ValueError: x (тензор изображений) и y (метки) должны иметь одинаковую длину.Найдено: x.shape = (60, 60, 1), y.shape = (12464,)

Это может помочь при дальнейших проверках: enter image description here

Я полагаю, что с библиотекой должно быть что-то не так, как если бы я изменил форму своего изображения на 60x60 вместо 60x60x1, я получу:

ValueError: Ввод в .fit() должен иметьранг 4. Получил массив с формой: (12464, 60, 60)

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Весьма вероятно, что cats['images'] и cats['labels'] являются списками Python.Сначала преобразуйте их в массивы, используя np.array, а затем передайте их в flow метод:

cats['images'] = np.array(cats['images'])
cats['labels'] = np.array(cats['labels'])
0 голосов
/ 02 января 2019

Вам нужно изменить форму ваших ярлыков

labels = np.asarray(cats["label"]).reshape(( -1 , 1 ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...