Как подключить пользовательский слой Keras с несколькими выходами - PullRequest
0 голосов
/ 24 августа 2018

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

Network sketch map:

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

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

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])
0 голосов
/ 24 августа 2018

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

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

output_1, output_2 = custom_layer()(input_layer)
layer_a_output = layer_a()(output_1)
layer_b_output = layer_b()(output_2)
0 голосов
/ 24 августа 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))
...