多对多分类使用Keras LSTM

我对Keras中的RNN/LSTM很陌生,需要关于是否以及如何使用它们来解决我的多对多分类问题的一些建议。

我有多个时间序列:大约1500个“运行”,每个运行持续大约100-300个时间步,并且有多个通道。我明白我需要将数据零填充到最大时间步数,因此我的数据看起来像这样:

[nb_samples, timesteps, input_dim]: [1500, 300, 10]

由于即使是人类也无法在不知道过去的情况下为单个时间步获取标签,我可以进行特征工程并训练一个经典的分类算法,但是,我认为LSTMs在这里会是一个很好的选择。这个回答告诉我,在Keras中进行多对多分类时,我需要将return_sequences设置为True。然而,我不太明白接下来该怎么做 – 我应该将返回的序列作为另一个普通层的输入吗?我如何将它连接到我的输出层?

任何帮助、提示或教程链接都将不胜感激 – 我找到了很多关于多对一分类的资料,但没有找到关于多对多的好资料。


回答:

解决这个问题的方法有很多种,我将介绍一些可能适合你的问题的方法。

如果你想堆叠两个LSTM层,那么return-seq可以帮助学习另一个LSTM层,如下面的例子所示。

from keras.layers import Dense, Flatten, LSTM, Activationfrom keras.layers import Dropout, RepeatVector, TimeDistributedfrom keras import Input, Modelseq_length = 15input_dims = 10output_dims = 8 # 类别数量n_hidden = 10model1_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 = net1model1 = Model(inputs=model1_inputs, outputs = model1_outputs, name='model1')## 拟合模型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        _________________________________________________________________
  1. 另一种选择是,你可以使用完整的返回序列作为下一层的特征。在这种情况下,创建一个简单的Dense层,其输入将是[batch, seq_len*lstm_output_dims]

注意:这些特征对于分类任务可能很有用,但大多数情况下,我们使用堆叠的LSTM层,并使用其输出无完整序列作为分类层的特征。

这个回答可能有助于理解用于不同目的的LSTM架构的其他方法。

Related Posts

Flatten and back keras

我正在尝试使用自编码器获取简单向量中的值 这是我的代码…

如何按索引访问PyTorch模型参数

如果我的网络有10层,包括偏置项,如何仅通过索引访问第…

Python中多元逻辑回归显示错误

我试图使用逻辑回归进行预测,并使用Python和skl…

在MACOS上安装NLTK

我在我的2015款Mac Pro上尝试安装NLTK,操…

如何在R中将通过RFE选择的变量插入到机器学习模型中?

我想使用递归特征消除方法来选择最重要的特征,然后将这些…

CountVectorizer 错误:ValueError: setting an array element with a sequence

我有一个包含144条学生反馈的数据集,其中有72条正面…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注