我正在使用带有tensorflow后端的Keras。我想合并具有不同形状的两个图层。我有一个形状为(None,32)的图层,另一层是形状为(None,16,16,32)的卷积层。输出应具有形状(无,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”。
答案 0 :(得分:0)
尝试一下:
merged = concatenate([layer1, layer2, ..., layerN])
用您自己的图层名称替换 layersN 。
我已经开发了类似的东西。拿一个look here。