Я определил пользовательский слой Keras custom_layer с двумя выходами: output_1 и output_2. Затем я хочу, чтобы два независимых слоя A и B подключались к output_1 и output_2 соответственно. Как реализовать такую сеть?
Как подключить пользовательский слой Keras с несколькими выходами
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
Спасибо за ваш ответ. Что делать, если перед custom_layer есть несколько слоев? например custom_layer = CustomLayer(...)(previous_layers)
- person Tian; 24.08.2018
@Tian Чтобы убедиться, что я правильно понял ваш вопрос: вы имеете в виду, что ваш пользовательский слой был применен к двум разным входным тензорам? или у него есть два выхода при применении к одному входному тензору?
- person today; 24.08.2018
пользовательский слой имеет несколько слоев перед ним и имеет два выхода
- 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