【问题标题】:Recreate input with LSTM autoencoder使用 LSTM 自动编码器重新创建输入
【发布时间】:2020-09-07 14:05:48
【问题描述】:

我正在尝试使用 LSTM 对我的输入数据进行编码,然后从编码数据中解码/重新创建它。我有 100 个样本要运行,每个样本有 40 个时间步长和 1260 个特征。 我对网络外观的粗略想法如下。将数据输入到 LSTM 层,将其编码到密集层,然后使用最终的 LSTM 作为输出层。

model = Sequential()
model.add(LSTM(100, input_shape=(40, 1260), return_sequences=True))
model.add(Dense(100, activation='softmax'))
model.add(LSTM(1260))

model.compile(loss='mse', optimizer=adam, metrics=['accuracy'])
model.fit(input_train, input_test, epochs=100, batch_size=1, verbose=2)

我尝试过不同的维度大小和隐藏层的数量,但我无法获得接近 1% 左右的准确度。 提前致谢

更新代码:

timesteps = 40
features = 1260

model = Sequential()
model.add(LSTM(200, input_shape=(timesteps,features)))
model.add(RepeatVector(timesteps))
model.add(TimeDistributed(Dense(features)))
model.add(LSTM(1260, return_sequences=True))
model.summary()
opt = keras.optimizers.Adam(lr=0.001)
model.compile(loss='mse', optimizer=opt, metrics=['accuracy'])
model.fit(input_train, input_test, epochs=200, batch_size=16, verbose=1)

【问题讨论】:

    标签: python tensorflow keras lstm autoencoder


    【解决方案1】:

    玻璃3,

    很可能是由于引入Dense 层而导致的错误,而没有跨时间传播其值。在大多数 LSTM 自动编码器结构中,我观察到在编码器之后使用keras.layers.RepeatVector(),在解码器之后使用keras.layers.TimeDistributed(keras.layers.Dense())。尝试复制示例中的结构,然后逐步修改它们。

    【讨论】:

    • 您好,感谢您的回复,我在 TimeDistributed 和 RepeatVectors 上做了一些阅读,现在更新代码的准确率大约为 10%。我在原来的帖子中更新了它。您对提高准确性有什么建议吗?
    • 您的样本太少而特征太多,无法获得高精度。尝试获取更多数据或在更长的数据集上测试您的结构。你现在会接受答案吗?