【发布时间】:2018-12-24 05:59:26
【问题描述】:
我不知道如何正确地将训练数据输入到功能性 keras 模型中。我有两种输入类型:图像数据和浮点数,每个数字属于一个图像。该数据分为 6 类。我需要如何格式化输入数据以及如何在我的 keras 网络中定义它? 图像数据由 CNN 分析,然后应与浮点数连接。之后,使用三个密集层进行分类。似乎没有与我的问题类似的示例或教程。
【问题讨论】:
标签: python tensorflow keras
我不知道如何正确地将训练数据输入到功能性 keras 模型中。我有两种输入类型:图像数据和浮点数,每个数字属于一个图像。该数据分为 6 类。我需要如何格式化输入数据以及如何在我的 keras 网络中定义它? 图像数据由 CNN 分析,然后应与浮点数连接。之后,使用三个密集层进行分类。似乎没有与我的问题类似的示例或教程。
【问题讨论】:
标签: python tensorflow keras
两个独立的输入:
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,依此类推。
【讨论】:
classes 变量中的 fit。就是答案最后一部分提到的Outputs。 /// 我来自巴西 :D --- 如果您认为这回答了您的问题,请将其标记为已回答 :)
(1200,6)。每张图片 6 个类。