我不知道如何正确地将训练数据输入功能性keras模型。我有两种输入类型:图像数据和浮点数,每个数字都属于一个图像。此数据分为6类。我该如何格式化输入数据以及如何在我的keras网络中对其进行定义? 图像数据由CNN分析,然后应与浮点数连接。之后,将三个密集层用于分类。似乎没有类似于我的问题的示例或教程。
答案 0 :(得分:1)
两个单独的输入:
imageInput = Input(image_shape) #often, image_shape is (pixelsX, pixelsY, channels)
floatInput = Input(float_shape) #if one number per image, shape is: (1,)
卷积部分:
convOut = SomeConvLayer(...)(imageInput)
convOut = SomeConvLayer(...)(convOut)
#...
convOut = SomeConvLayer(...)(convOut)
如有必要,请与其他输入类似。
加入两个分支:
#Please make sure you use compatible shapes
#You should probably not have spatial dimensions anymore at this point
#Probably some kind of GloobalPooling:
convOut = GlobalMaxPooling2D()(convOut)
#concatenate the values:
joinedOut = Concatenate()([convOut,floatInput])
#or some floatOut if there were previous layers in the float side
用您的合并输出做更多的事情:
joinedOut = SomeStuff(...)(joinedOut)
joinedOut = Dense(6, ...)(joinedOut)
使用两个输入创建模型:
model = Model([imageInput,floatInput], joinedOut)
使用以下语言进行训练:
model.fit([X_images, X_floats], classes, ...)
classes
是一个“单幅热编码”张量,其中包含每个图像的正确类。
但是,没有“一个正确的解决方案”。您可以尝试很多不同的方法,例如在卷积中间的某个位置“加数字”,或者将其相乘,或者在设法以某种方式连接值之后创建更多的卷积。...这是艺术。
输入和输出数据应为 numpy数组。
数组的形状应为:
- Image input: `(number_of_images, side1, side2, channels)`
- Floats input: `(number_of_images, number_of_floats_per_image)`
- Outputs: `(number_of_images, number_of_classes)`
Keras将了解这些形状的所有必要信息,所有数组中的行0将是图像0,行1将是图像1,依此类推。