如何创建keras';解码器型号';它从中间层开始,并延伸到输出层

如何创建keras';解码器型号';它从中间层开始,并延伸到输出层,keras,keras-layer,Keras,Keras Layer,在自动编码器中,创建编码器模型很容易,因为我们有一个清晰的输入层。但我对如何创建解码器模型感到困惑。例如,以下是图层: m = Sequential() ## Encoder m.add(Dense(512, activation='elu', input_shape=(784,))) m.add(Dense(128, activation='elu')) m.add(Dense(2, activation='linear', name=

在自动编码器中,创建编码器模型很容易,因为我们有一个清晰的输入层。但我对如何创建解码器模型感到困惑。例如,以下是图层:

m = Sequential()

##  Encoder 
m.add(Dense(512,  activation='elu', input_shape=(784,)))
m.add(Dense(128,  activation='elu'))
m.add(Dense(2,
            activation='linear',
            name="bottleneck")   
            )  


##  Decoder
m.add(Dense(128,  activation='elu', name = "first_decode_layer"))
m.add(Dense(512,  activation='elu'))
m.add(Dense(784,  activation='sigmoid', name = "output_layer")) 
#  Compile the model
m.compile(
          loss='mean_squared_error',
          optimizer = Adam()
         )
现在可以轻松创建编码器模型,如下所示:

encoder = Model(m.input,                         
                m.get_layer('bottleneck').output  
               )
但是,我无法理解如何创建解码器模型。例如,这不起作用:

decoder = Model(m.get_layer("first_decode_layer").input,                          
                    m.get_layer('output_layer').output  
                )
这个错误要求我有一个输入层。它说:

"inputs must come from `keras.layers.Input` (thus holding past layer
metadata), they cannot be the output of a previous non-Input layer.
Here, a tensor specified as input to your model was not an Input tensor, "

非常感谢您的指导。

完美答案。据我所知,我们正在创建两个独立的顺序模型。然后使用最后两行耦合这两个代码:auto_out=解码器(encoder.output);自动编码器=型号(编码器输入,自动输出)。
#encoder
encoder = Sequential()
....
encoder.add(...."bottleneck")

#decoder
decoder = Sequential()
decoder.add(......"first_decoder_layer")
...
decoder.add(......"output_layer")

#autoencoder
auto_out = decoder(encoder.output)
autoencoder = Model(encoder.input, auto_out)