Keras CNN - 使用可变图像尺寸训练图像分类模型

问题描述 投票:0回答:1

我目前正在使用 Keras 构建图像分类模型。我面临的挑战与数据集中图像的可变大小有关。我的目标是建立一个模型,可以有效地对图像进行分类,同时保留其原始尺寸以避免扭曲。因此,我在使用 Keras 训练图像分类模型时遇到了问题。我的模型的架构允许使用可变的输入图像尺寸,指定为 input_shape=(None, None, 3),以保留图像的原始大小。

创建模型

`模型 = 顺序()

输入层

model.add(Conv2D(3, (3, 3), activation="relu", input_shape=(None, None, 3)))
model.add(Conv2D(32, (3, 3), activation="relu"))
model.add(Conv2D(16, (3, 3), activation="relu"))
model.add(Conv2D(8, (3, 3), activation="relu"))

添加 GlobalMaxPooling2D`

model.add(GlobalMaxPooling2D())

添加激活softmax`

model.add(Dense(2, activation="softmax"))

这部分工作正常,但是当要训练模型时,我遇到了问题。

steps = 50 epochs = 25

重塑输入数据以匹配张量流迭代顺序

x_train = []

for img in df['Image']:

`x_train.append(img.array.transpose(1,2,0))`

training data gen (data agumentation)

train_datagen = ImageDataGenerator(shear_range=0.2, zoom_range=0.2, horizontal_flip=True)

gen = train_datagen.flow(np.asarray(x_train), df['ClassIndex'])

model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

model.fit_generator(gen, steps_per_epoch=steps, epochs=epochs, verbose=1)

我遇到了这个错误

Execute failed: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (11, 1) 

我认为这个错误是关于尝试将图像转换为 NumPy 数组并将它们存储在列表中,但它无法处理图像尺寸不一致的情况。

因此,我正在寻求有关如何有效处理此问题的指导。 任何建议或替代方法将不胜感激。

arrays keras deep-learning conv-neural-network classification
1个回答
0
投票

您传递到 Conv2D 层的数据维度导致您出现此错误。 Conv2D层通常需要这种格式的数据:

(batch_size, height, width, channels)

但你的数据形状是
(11, 1)

重塑
x_train
可能会有用。

© www.soinside.com 2019 - 2024. All rights reserved.