我正在尝试使用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)
glass3,
很可能是由于引入Dense
层而没有将其值在时间上扩展所引起的误差。在大多数LSTM自动编码器结构中,我观察到在编码器之后使用keras.layers.RepeatVector()
,在解码器之后使用keras.layers.TimeDistributed(keras.layers.Dense())
。尝试复制示例中的结构,然后逐渐修改它们。