【发布时间】:2018-08-26 22:03:16
【问题描述】:
我想弄清楚如何在不使用 ImageDataGenerator 的情况下在 Keras 中训练 CNN。本质上,我试图找出 ImageDataGenerator 类背后的魔力,这样我就不必在所有项目中都依赖它。
我有一个数据集,分为 2 个文件夹:training_set 和 test_set。每个文件夹都包含 2 个子文件夹:cats 和 dogs。
我在 for 循环中使用 Keras 的 load_img 类将它们全部加载到内存中,如下所示:
trainingImages = []
trainingLabels = []
validationImages = []
validationLabels = []
imgHeight = 32
imgWidth = 32
inputShape = (imgHeight, imgWidth, 3)
print('Loading images into RAM...')
for path in imgPaths:
classLabel = path.split(os.path.sep)[-2]
classes.add(classLabel)
img = img_to_array(load_img(path, target_size=(imgHeight, imgWidth)))
if path.split(os.path.sep)[-3] == 'training_set':
trainingImages.append(img)
trainingLabels.append(classLabel)
else:
validationImages.append(img)
validationLabels.append(classLabel)
trainingImages = np.array(trainingImages)
trainingLabels = np.array(trainingLabels)
validationImages = np.array(validationImages)
validationLabels = np.array(validationLabels)
当我打印 trainingImages 和 trainingLabels 的 shape() 时,我得到:
Shape of trainingImages: (8000, 32, 32, 3)
Shape of trainingLabels: (8000,)
我的模型如下所示:
model = Sequential()
model.add(Conv2D(
32, (3, 3), padding="same", input_shape=inputShape))
model.add(Activation("relu"))
model.add(Flatten())
model.add(Dense(len(classes)))
model.add(Activation("softmax"))
当我编译并尝试拟合数据时,我得到:
ValueError: Error when checking target: expected activation_2 to have shape (2,) but got array with shape (1,)
这告诉我我的数据没有正确输入系统。如何在不使用ImageDataGenerator 的情况下正确准备我的数据数组?
【问题讨论】: