【问题标题】:How to merge layers with different shapes?如何合并不同形状的图层?
【发布时间】:2019-09-01 02:13:03
【问题描述】:

我正在使用带有 tensorflow 后端的 Keras。我想合并两个不同形状的图层。我有一个形状为 (None, 32) 的层和另一个形状为 (None, 16, 16, 32) 的卷积层。输出应该有一个形状 (None, 16, 16),它实际上是卷积单元的加权和。

我尝试通过 Lambda 层解决这个问题。而我只是引入 tf.einsum 运算来计算加权和。

def product_sum(inputs):
    conv_layers = inputs[0]   #(None, 16, 16, 32)
    weights = inputs[1]       #(None, 32)
    result = tf.einsum('ijkl, il->ijk', conv_layers, weights) 
    return result

# merge two layers
conv_output = basic_model.get_layer(last_conv_layer).output 
weight_output = basic_model.get_layer(weights_layer).output
weight_sum_ = Lambda(product_sum)
result = weight_sum([conv_output, weight_output])
model = Model(inputs=[basic_model.input], outputs=[result])

我想它可以工作,但在 tf.einsum 中出现错误: "ValueError: 索引格式不正确:ijkl, il-> ijk"。

【问题讨论】:

    标签: python-2.7 tensorflow keras


    【解决方案1】:

    试试这个:

    merged = concatenate([layer1, layer2, ..., layerN])
    

    layersN 替换为您自己的图层名称。

    我已经开发了类似的东西。采取look here

    【讨论】:

    • 谢谢。但实际上,你误解了我的问题。我想合并具有不同输出形状的图层,这些图层没有被“连接”覆盖。
    • 你试过this?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多