【问题标题】:Adding an LSTM layer to my autoencoder in keras在 keras 中将 LSTM 层添加到我的自动编码器
【发布时间】:2020-03-12 20:12:51
【问题描述】:

我在 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 维数据,并且我想将我的数据保留为向量。有人可以给我一个例子,说明如何使用重塑来集成这样的层吗?到目前为止,我的所有尝试都失败了。

【问题讨论】:

  • 我认为 LSTM 不适合图像,因为您不能从前 k 个像素中预测像素 N。 LSTM 更适合 NLP 任务,因为意义来自单词序列。但是如果你真的想这样做,你的向量应该是[[1], [2], ..., [5]]
  • 我的图像是一个频谱图,我希望将它按顺序提供给 lstm 一些如何???然后让 lstm 返回模型其余部分的一维向量

标签: python-3.x machine-learning keras


【解决方案1】:

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)




【讨论】:

  • 如果我有一个要训练的向量列表,这会起作用吗?还是只有一个向量?
  • 是的,您需要将所有输入数据转换为 3D 张量并指定批量大小
  • 我会尝试自己解决这个问题,尽管我在尝试重塑数据时不断出错
  • 还有为什么解码层的最后一层会是特征数呢?我希望它是时间步数
  • 因为在这个例子中,它尝试预测下一个时间步的值,因为你尝试构建自动编码器,所以它恰好与输入具有相同的长度。
猜你喜欢
  • 2019-10-19
  • 2017-11-27
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 2021-04-23
  • 2019-08-21
  • 2020-09-02
  • 2019-04-29
相关资源
最近更新 更多