如何将自定义Keras图层与多个输出连接

时间:2018-08-24 08:08:10

标签: keras keras-layer

我定义了一个定制的Keras层custom_layer,它具有两个输出:output_1和output_2。接下来,我希望两个独立的层A和B分别连接到output_1和output_2。如何实现这种网络?

Network sketch map:

3 个答案:

答案 0 :(得分:0)

如果将自定义图层应用于一个输入时,它具有两个输出张量(即,它返回输出张量的列表),则:

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))

答案 1 :(得分:0)

使用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])

答案 2 :(得分:0)

Keras支持在您的自定义层中包含多个输出层。有merge,它将很快更新文档。 基本思想是使用列表。一切都必须在自定义图层(如图层和形状)中保留,而必须作为它们的列表返回。

如果以正确的方式实现自定义图层,其余的操作很简单:

output_1, output_2 = custom_layer()(input_layer)
layer_a_output = layer_a()(output_1)
layer_b_output = layer_b()(output_2)