Python 基于辅助数据的Keras图像增强
我尝试使用两个输入对图像进行分类:1)图像,和2)附加到图像的辅助数据,例如,在将图像大小调整为网络输入之前,图像的原始宽度:Python 基于辅助数据的Keras图像增强,python,image,machine-learning,keras,classification,Python,Image,Machine Learning,Keras,Classification,我尝试使用两个输入对图像进行分类:1)图像,和2)附加到图像的辅助数据,例如,在将图像大小调整为网络输入之前,图像的原始宽度: input_anci = Input(shape=(1, ), name='extra_input') input_images = Input(shape=(img_width, img_height, 3), name='image_input') vgg_out = base_model(input_images) # Here base_model is a
input_anci = Input(shape=(1, ), name='extra_input')
input_images = Input(shape=(img_width, img_height, 3), name='image_input')
vgg_out = base_model(input_images) # Here base_model is a VGG16
f0 = Flatten()(vgg_out)
f0 = Dense(64, activation = 'relu')(f0)
f0 = Dropout(0.5)(f0)
f1 = Dense(8, activation = 'relu')(input_anci)
f01 = Concatenate(axis=-1)([f0, f1])
classidx = Dense(num_classes, activation = 'softmax')(f01)
model = Model(inputs=[input_images, input_anci], outputs=classidx)
为了增强图像,我使用了ImageDataGenerator
:
train_datagen = ImageDataGenerator(
rotation_range = 360,
width_shift_range = 0.2,
height_shift_range = 0.2,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True,
vertical_flip = True,
fill_mode = 'nearest',
validation_split = 0.25)
然后我定义了序列和验证生成器:
train_generator = train_datagen.flow((X, X_anci), Y, subset = 'training')
validation_generator = train_datagen.flow((X, X_anci), Y, subset = 'validation')
然后我使用fit_generator
来训练模型:
history = model.fit_generator(train_generator,validation_data = validation_generator, ...)
运行时,我收到以下错误消息:
Traceback (most recent call last):
File "vgg16-v3x.py", line 265, in <module>
subset = 'training')
File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\preprocessing\image.py", line 705, in flow
subset=subset)
File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\preprocessing\image.py", line 1116, in __init__
(np.asarray(x).shape, np.asarray(y).shape))
File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\numpy\core\numeric.py", line 492, in asarray
return array(a, dtype, copy=False, order=order)
ValueError: could not broadcast input array from shape (824,56,56,3) into shape (824)
回溯(最近一次呼叫最后一次):
文件“vgg16-v3x.py”,第265行,在
子集=‘训练’)
文件“C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site packages\keras\preprocessing\image.py”,第705行,在flow中
子集=子集)
文件“C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site packages\keras\preprocessing\image.py”,第1116行,在u init中__
(np.asarray(x).形,np.asarray(y).形)
文件“C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site packages\numpy\core\numeric.py”,第492行,在asarray中
返回数组(a,数据类型,copy=False,order=order)
ValueError:无法将输入数组从形状(824,56,56,3)广播到形状(824)
我该如何确保(X,X_anci)
以正确的方式输入[输入图像,输入图像]
另外,这是我第一次发布问题。希望格式不是太糟糕。您能编辑您的帖子并添加模型架构代码吗?刚刚编辑好。谢谢而
X\u-anci
数组(即X\u-anci.shape
)的形状是什么?X\u-anci的形状是:(824),因此它起源于flow
方法。我最好的猜测是,这是由于2.1.6版本中的一个bug造成的。我使用的是2.2.0版,您的代码在我的机器上运行。升级Keras并查看它是否已解决。