【问题标题】:Format mutiple inputs with mutiple categories for a functional keras model and feed it to the model为功能性 keras 模型格式化具有多个类别的多个输入并将其提供给模型
【发布时间】:2018-12-24 05:59:26
【问题描述】:

我不知道如何正确地将训练数据输入到功能性 keras 模型中。我有两种输入类型:图像数据和浮点数,每个数字属于一个图像。该数据分为 6 类。我需要如何格式化输入数据以及如何在我的 keras 网络中定义它? 图像数据由 CNN 分析,然后应与浮点数连接。之后,使用三个密集层进行分类。似乎没有与我的问题类似的示例或教程。

【问题讨论】:

    标签: python tensorflow keras


    【解决方案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,依此类推。

    【讨论】:

    • 谢谢。我有大部分,但这是我卡住的部分:model.fit([X_images, X_floats], classes, ...)。 keras 如何知道输入数据在哪里,以及输入的结构如何(文件格式、某些文件夹结构?)。不知何故,我需要告诉 keras 它必须期待六个类以及哪些图像属于哪个类。除此之外,我需要告诉他,什么浮点值属于什么图像,不是吗?换句话说:X_images 和 X_floats 需要如何定义?
    • 非常感谢!这真的很有帮助。如果你碰巧在德国,我会给你一个啤酒;)还有一个问题:如果我理解它,你就不告诉凯拉斯输入图像/浮动属于什么类,对吧?为什么不?我有标签数据,所以我不应该向他提供有关图像标签的信息吗?还是存储在“classes”参数中?
    • 这是在 classes 变量中的 fit。就是答案最后一部分提到的Outputs。 /// 我来自巴西 :D --- 如果您认为这回答了您的问题,请将其标记为已回答 :)
    • 好的,所以如果我有 1200 张图像(当然还有 1200 个浮点数),每个类有 200 个,那么输入将是 (1200, 256,256,3) 和 (1200,1)。输出或“类”将是 (200,6)? --是的,标记为已解决!再次感谢。
    • 输出将是(1200,6)。每张图片 6 个类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2022-01-08
    • 2019-03-31
    • 2021-06-24
    • 1970-01-01
    • 2021-08-13
    相关资源
    最近更新 更多