【发布时间】:2018-09-06 10:06:59
【问题描述】:
我有一个这样定义的自动编码器
inputs = Input(batch_shape=(1,timesteps, input_dim))
encoded = LSTM(4,return_sequences = True)(inputs)
encoded = LSTM(3,return_sequences = True)(encoded)
encoded = LSTM(2)(encoded)
decoded = RepeatVector(timesteps)(encoded)
decoded = LSTM(3,return_sequences = True)(decoded)
decoded = LSTM(4,return_sequences = True)(decoded)
decoded = LSTM(input_dim,return_sequences = True)(decoded)
sequence_autoencoder = Model(inputs, decoded)
encoder = Model(inputs,encoded)
我希望编码器像这样连接到 LSTM 层
f_input = Input(batch_shape=(1, timesteps, input_dim))
encoder_input = encoder(inputs=f_input)
single_lstm_layer = LSTM(50, kernel_initializer=RandomUniform(minval=-0.05, maxval=0.05))(encoder_input)
drop_1 = Dropout(0.33)(single_lstm_layer)
output_layer = Dense(12, name="Output_Layer"
)(drop_1)
final_model = Model(inputs=[f_input], outputs=[output_layer])
但它给了我一个尺寸错误。
Input 0 is incompatible with layer lstm_3: expected ndim=3, found ndim=2
我怎样才能正确地做到这一点。?
【问题讨论】:
-
编码器的输出(即
encoder_input)的形状为(1, 2)。这就是为什么它不能被馈送到下面的 LSTM 层。 -
是的。那我该怎么办?
-
我不知道您正在处理的问题是什么以及为什么要这样做,但是如果无论如何要求解决此问题,您必须以某种方式拥有一个形状为
(1, ?, 2)的张量能够将其馈送到 LSTM 层。为此,一种方法是在encoder_input上使用RepeatVector层。但是,这可能适合也可能不适合,具体取决于您正在处理的问题和您想要达到的结果。 -
@today 我正在尝试做这样的事情eng.uber.com/wp-content/uploads/2017/06/…
标签: python keras deep-learning lstm