我想制作一个Keras
可以输入不同大小图像的 CNN 模型。根据其他问题,我可以理解如何设置模型,例如Input =(None,None,3)
. 但是,我不确定如何准备输入/输出数据集。具体来说,现在我想将数据集与(100,100)和(240,360)结合起来。但是,我不知道如何组合这些数据集。
如何在 CNN 预测中准备不同大小的输入
数据挖掘
机器学习
神经网络
深度学习
喀拉斯
美国有线电视新闻网
2021-09-16 05:13:18
4个回答
传统上,当在 CNN 中处理不同大小的图像时(这在现实世界的问题中经常发生),我们会借助任何图像处理库(OpenCV、PIL 等)或有时将图像调整为最小图像的大小,将大小不等的图像填充到所需大小。调整图像大小更简单,并且最常用。
正如Media在上述答案中所提到的,无法直接使用不同尺寸的图像。这是因为当您定义 CNN 架构时,您会根据输入大小计划应该有多少层。如果没有固定的输入形状,您将无法定义模型的架构。因此,有必要将所有图像转换为相同大小。
有一种方法可以同时包含两种图像尺寸。您可以对图像进行预处理,以便将它们重新调整为相同的尺寸。
一些显示这一点的免费代码:
img_width, img_height = 150, 150
train_data_dir = '/yourdir/train'
validation_data_dir = '/yourdir/validation'
nb_train_samples =
nb_validation_samples =
epochs = 50
batch_size = 16
if K.image_data_format() == 'channels_first':
input_shape = (3, img_width, img_height)
else:
input_shape = (img_width, img_height, 3)
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.1,
zoom_range=0.1,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
这使用 Keras 图像流 API 进行动态数据增强,代码底部的数据生成器会将您的图像调整为您在顶部指定的任何尺寸。
一种方法是在训练时填充图像。也就是说,在训练时,Keras 会期望一批中的所有张量大小相同。但是,在推理时,如果您只使用单个图像,它可以是任意大小。所以在训练时你可以做的是填充你的 100 x 100 图像,这样它们在填充后的新尺寸变成 240 x 360。
你可以看看这个教程。