Tho*_*mas 3 python machine-learning lstm keras tensorflow
我是 Keras 中 RNN/LSTM 的新手,需要关于是否/如何将它们用于我的问题的建议,这是多对多分类。
我有许多时间序列:大约 1500 次“运行”,每次持续大约 100-300 个时间步长并且有多个通道。我知道我需要将数据零填充到最大时间步数,因此我的数据如下所示:
[nb_samples, timesteps, input_dim]: [1500, 300, 10]
Run Code Online (Sandbox Code Playgroud)
由于即使对于人类来说,在不了解过去的情况下也无法获得单个时间步的标签,因此我可以进行特征工程并训练经典分类算法,但是,我认为 LSTM 非常适合这里。这个答案告诉我,对于 Keras 中的多对多分类,我需要将 return_sequences 设置为 True。但是,我不太明白如何从这里开始 - 我是否使用返回序列作为另一个普通层的输入?我如何将它连接到我的输出层?
非常感谢任何帮助、提示或教程链接 - 我发现了很多用于多对一分类的东西,但对多对多没有什么好处。
可以有很多方法来解决这个问题,我正在指定哪种方法可以很好地解决您的问题。
如果你想要stack两层LSTM,那么return-seq可以帮助学习另一层LSTM,如下例所示。
from keras.layers import Dense, Flatten, LSTM, Activation
from keras.layers import Dropout, RepeatVector, TimeDistributed
from keras import Input, Model
seq_length = 15
input_dims = 10
output_dims = 8 # number of classes
n_hidden = 10
model1_inputs = Input(shape=(seq_length,input_dims,))
model1_outputs = Input(shape=(output_dims,))
net1 = LSTM(n_hidden, return_sequences=True)(model1_inputs)
net1 = LSTM(n_hidden, return_sequences=False)(net1)
net1 = Dense(output_dims, activation='relu')(net1)
model1_outputs = net1
model1 = Model(inputs=model1_inputs, outputs = model1_outputs, name='model1')
## Fit the model
model1.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 15, 10) 0
_________________________________________________________________
lstm_1 (LSTM) (None, 15, 10) 840
_________________________________________________________________
lstm_2 (LSTM) (None, 10) 840
_________________________________________________________________
dense_3 (Dense) (None, 8) 88
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)
Dense层,其输入将为[batch, seq_len*lstm_output_dims].注意:这些特征对于分类任务很有用,但大多数情况下,我们使用堆叠的 lstm 层并将其输出with-out complete sequence用作分类层的特征。
这个答案可能有助于理解LSTM用于不同目的的另一种架构方法。