Как объединить слои с разными формами? - PullRequest
0 голосов
/ 10 апреля 2019

Я использую 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».

1 Ответ

0 голосов
/ 10 апреля 2019

Попробуйте это:

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

Замените layerN именем ваших собственных слоев.

Я уже разработал что-то вроде этого. Взгляните сюда .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...