Keras ImageDataGenerator:数据和标签形状的问题
Posted
技术标签:
【中文标题】Keras ImageDataGenerator:数据和标签形状的问题【英文标题】:Keras ImageDataGenerator: problem with data and label shape 【发布时间】:2019-05-29 01:07:50 【问题描述】:我想使用 Keras 生成更多图像,如您在 here 中所见, 使用这段代码(几乎和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,)
这可能有助于进一步检查:
我想图书馆应该有问题,好像我将图像的形状更改为 60x60 而不是 60x60x1 我会得到:
ValueError:
.fit()
的输入应该有 4 级。得到数组 形状:(12464, 60, 60)
【问题讨论】:
【参考方案1】:您需要更改标签的形状
labels = np.asarray(cats["label"]).reshape(( -1 , 1 ))
【讨论】:
这不起作用并产生几乎相同的错误“ValueError:x
(图像张量)和y
(标签)应该具有相同的长度。发现:x.shape = (60, 60 , 1), y.shape = (12464, 1)"【参考方案2】:
cats['images']
和 cats['labels']
很可能是 Python 列表。首先使用np.array
将它们转换为数组,然后将它们传递给flow
方法:
cats['images'] = np.array(cats['images'])
cats['labels'] = np.array(cats['labels'])
【讨论】:
我预计这种情况会出现以下错误“AttributeError:'list' object has no attribute 'shape'”这就是为什么我从来没想过。非常感谢。以上是关于Keras ImageDataGenerator:数据和标签形状的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 ImageDataGenerator 时 Keras 拆分训练测试集
Keras ImageDataGenerator 不处理符号链接文件