如何创建一个从中间层开始并延伸到输出层的keras 'Decoder model'
How to create a keras 'Decoder model' that begins from an intermediate layer and extends to output 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="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, "
感谢指导。
#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)
在自动编码器中,很容易创建编码器模型,因为我们有一个清晰的输入层。但是我对如何创建解码器模型感到困惑。例如,这里是图层:
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, "
感谢指导。
#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)