Я использую Keras с бэкэндом тензорного потока.Я хочу объединить два слоя с разными формами.У меня есть слой с формой (Нет, 32) и еще один сверточный слой с формой (Нет, 16, 16, 32).Вывод должен иметь форму (None, 16, 16), которая на самом деле является взвешенной суммой сверточных единиц.
Я пытаюсь решить это с помощью лямбда-слоя.И я просто ввел операцию 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».