Как подключить пользовательский слой Keras с несколькими выходами

Я определил пользовательский слой Keras custom_layer с двумя выходами: output_1 и output_2. Затем я хочу, чтобы два независимых слоя A и B подключались к output_1 и output_2 соответственно. Как реализовать такую ​​сеть?

Карта эскиза сети:


person Tian    schedule 24.08.2018    source источник
comment
Ваш вопрос не ясен, почему output_1 отличается от output_2? Может быть, вы хотите извлечь ouput_1 после слоя A и output_2 после слоя b?   -  person paolof89    schedule 24.08.2018
comment
Можете ли вы показать нам определение пользовательского слоя?   -  person Kota Mori    schedule 24.08.2018


Ответы (3)


Используя режим API keras, вы можете создать любую сетевую архитектуру. В вашем случае возможное решение

input_layer = Input(shape=(100,1))
custom_layer = Dense(10)(input_layer)

# layer A model
layer_a = Dense(10, activation='relu')(custom_layer)
output1 = Dense(1, activation='sigmoid')(layer_a)

# layer B model
layer_b = Dense(10, activation='relu')(custom_layer)
output1 = Dense(1, activation='sigmoid')(layer_b)

# define model input and output
model = Model(inputs=input_layer, outputs=[output1, output2])
person paolof89    schedule 24.08.2018

Если пользовательский слой имеет два выходных тензора (т. е. он возвращает список выходных тензоров) при применении к одному входу, то:

custom_layer_output = CustomLayer(...)(input_tensor)

layer_a_output = LayerA(...)(custom_layer_output[0])
layer_b_output = LayerB(...)(custom_layer_output[1])

Но если он применяется к двум разным входным тензорам, то:

custom_layer = CustomLayer(...)
out1 = custom_layer(input1)
out2 = custom_layer(input2)

layer_a_output = LayerA(...)(out1)
layer_b_output = LayerB(...)(out2)

# alternative way
layer_a_output = LayerA(...)(custom_layer.get_output_at(0))
layer_b_output = LayerB(...)(custom_layer.get_output_at(1))
person today    schedule 24.08.2018
comment
Спасибо за ваш ответ. Что делать, если перед custom_layer есть несколько слоев? например custom_layer = CustomLayer(...)(previous_layers) - person Tian; 24.08.2018
comment
@Tian Чтобы убедиться, что я правильно понял ваш вопрос: вы имеете в виду, что ваш пользовательский слой был применен к двум разным входным тензорам? или у него есть два выхода при применении к одному входному тензору? - person today; 24.08.2018
comment
пользовательский слой имеет несколько слоев перед ним и имеет два выхода - person Tian; 24.08.2018

Keras поддерживает наличие нескольких выходных слоев в пользовательском слое. Существует слияние, которое скоро обновит документацию. Основная идея заключается в работе со списками. Все, что вам нужно повторить в своем пользовательском слое (например, слои и формы), вы должны вернуть в виде их списков.

Если вы правильно реализуете свой пользовательский слой, все остальное просто:

output_1, output_2 = custom_layer()(input_layer)
layer_a_output = layer_a()(output_1)
layer_b_output = layer_b()(output_2)
person dennis-w    schedule 24.08.2018