首页 > 解决方案 > 在 keras 中将 LSTM 层添加到我的自动编码器

问题描述

我在 keras 中构建了这个带有 tensorflow 后端的自动编码器模型

encoded = Dense(units=600, activation='relu')(input_img)
encoded = Dense(units=500, activation='relu')(encoded)
encoded = Dense(units=bottleneck, activation='relu')(encoded)
decoded = Dense(units=500, activation='relu')(encoded)
decoded = Dense(units=600, activation='relu')(decoded)
decoded = Dense(units=img_size, activation='sigmoid')(decoded)

编码器的输入是一个一维数组,即 [1,2,3,4,5] 或者换句话说,一个图像的向量

我想添加一个 LSTM 层来改善我的结果,但是,我理解 LSTM 需要 3 维数据,并且我想将我的数据保留为向量。有人可以给我一个例子,说明如何使用重塑来集成这样的层吗?到目前为止,我所有的尝试都失败了。

标签: python-3.xmachine-learningkeras

解决方案


keras LSTM 需要维度(批次数、时间步长、特征数),因此您需要从我假设它代表的一维数组中更改,1 个示例,1 个特征和 5 个时间步长,[1,2,3,4,5]到 (1,5,1) 从 (你的例子数, 时间步数, 特征数) np.array([1,2,3,4,5]).reshape((1,5,1))。您还需要将输出重塑为(批次数、时间步长、预测值),例如 [2,3,4,5,6] 到np.array([2,3,4,5,6]).reshape((1,5,1)). 所以,现在你可以添加 LSTM。

例子

number_of_steps = 5
number_of_feature = 1
latent_dimension = 10
bottleneck = 2
input_of_model= Input(shape=(number_of_steps,number_of_feature))

# just in case you want state_h, state_c for something else
lstm_output, state_h, state_c = LSTM(latent_dimension, return_sequences=True, return_state=True)(input_of_model)

encoded = Dense(units=600, activation='relu')(lstm_output)
encoded = Dense(units=500, activation='relu')(encoded)
encoded = Dense(units=bottleneck, activation='relu')(encoded)
decoded = Dense(units=500, activation='relu')(encoded)
decoded = Dense(units=600, activation='relu')(decoded)
decoded = Dense(units=number_of_feature, activation='sigmoid')(decoded)

M = Model(inputs=[input_of_model], outputs=[decoded])
M.compile(keras.optimizers.Adam(),loss='mse')
M.summary()
M.fit(x=np.array([1,2,3,4,5]).reshape((1,5,1)), y=np.array([2,3,4,5,6]).reshape((1,5,1)), epochs=200)





推荐阅读