如何处理 LSTM 模型中的一些时间序列?
how dealing with some time series in LSTM model?
我是keras的新用户,我想轻松了解如何构建lstm模型。
在我的数据中,我有很多用户,有很多序列,如下:
user 1 :
X Labels
sequence 1 [ 0, 1 , 0, 1]
sequence 2 [ 0, 1 , 0, 1]
sequence 3 [ 0, 1 , 0, 1
sequence 4 ?
user 2 :
X labels
sequence 1 [ 0, 1 , 0, 1]
sequence 2 [ 0, 1 , 0, 1]
sequence 3 ?
每个用户都有序列系列,但必须是相同长度的系列。每个系列对应一个多标签系列。
我的目标是预测每个用户的下一个序列的标签,同时考虑最后一个序列(作为时间序列)。
当我只使用一个用户时,我成功了。事实上,我做了一个 lstm 输入
(批量大小、时间步长、特征)其中批量大小等于 1,因为我有一个用户,时间步长等于序列数,特征等于序列长度。
model_rnn = Sequential()
model_rnn.add(LSTM(20, return_sequences=True, input_shape=(None, 20)))
model_rnn.add(TimeDistributedDense(nb_classes))
model_rnn.add(Activation("sigmoid"))
optimizer = RMSprop(lr=0.01,decay=1e-6)
model_rnn.compile(loss='binary_crossentropy', optimizer=optimizer)
X_train = X_train.reshape((1,50,20))
y_train = y_train.reshape((1,50,109))
model_rnn.fit(X_train,y_train, batch_size=1, epochs=200)
我有两个问题:
当我拟合模型时,shuffle=False 重要吗?
当我定义 LSTM 时,是否应该将有状态选项设置为 True?
我已经为一个用户获得了不错的表现。我想对所有用户使用相同的方法。但我不知道如何为所有用户构建输入。
比如我想学习老用户的序列,预测他的下一个序列,
我会被迫为每个用户训练 LSTM 吗?或者我可以在一个 LSTM 中学习每个用户的时间序列序列?
特别是如果我使用一个 LSTM 并且我想预测一个用户的下一个序列,模型如何预测好句子,就像它不知道训练数据上的这个旧序列一样。
请注意,重要的是要考虑序列用户在它们之间是独立的。
感谢您的帮助
当我拟合模型时,shuffle=False 是否重要?
不,这并不重要,除非您将有状态设置为 True。请在下面查看下一个问题的答案。
定义 LSTM 时是否应该将有状态选项设置为 True?
LSTM 具有单元格,因此根据定义是有状态的(与 Keras 中使用的有状态含义不同)。 Fabien Chollet 给出了状态性的定义:
stateful: Boolean (default False). If True, the last state for each
sample at index i in a batch will be used as initial state for the
sample of index i in the following batch.
因此,如果您在 Keras 中将 LSTM 设置为无状态,则单元状态会在每个序列处重置。设置有状态模式后,所有状态都会传播到下一批。这意味着位于索引 i 的样本的状态 X_{i} 将用于下一批样本 X_{i+bs} 的计算,其中 bs 是批量大小(无改组)。
请注意,默认情况下,Keras 会打乱(排列)样本 X,并且 X_{i} 和 X_{i+1} 之间的依赖关系会丢失。因此,如果将 stateful 选项设置为 True,请确保设置 shuffle=False
.
我想学习旧用户序列并预测他的下一个序列,我会被迫为每个用户训练一个LSTM吗?或者我可以在ONE LSTM中学习每个用户的时间序列序列?
我相信,你需要一个 LSTM,因为它对一个用户来说效果很好。您可以像为一个用户所做的那样,将所有用户的所有序列视为您的训练数据。
我是keras的新用户,我想轻松了解如何构建lstm模型。
在我的数据中,我有很多用户,有很多序列,如下:
user 1 :
X Labels
sequence 1 [ 0, 1 , 0, 1]
sequence 2 [ 0, 1 , 0, 1]
sequence 3 [ 0, 1 , 0, 1
sequence 4 ?
user 2 :
X labels
sequence 1 [ 0, 1 , 0, 1]
sequence 2 [ 0, 1 , 0, 1]
sequence 3 ?
每个用户都有序列系列,但必须是相同长度的系列。每个系列对应一个多标签系列。 我的目标是预测每个用户的下一个序列的标签,同时考虑最后一个序列(作为时间序列)。
当我只使用一个用户时,我成功了。事实上,我做了一个 lstm 输入 (批量大小、时间步长、特征)其中批量大小等于 1,因为我有一个用户,时间步长等于序列数,特征等于序列长度。
model_rnn = Sequential()
model_rnn.add(LSTM(20, return_sequences=True, input_shape=(None, 20)))
model_rnn.add(TimeDistributedDense(nb_classes))
model_rnn.add(Activation("sigmoid"))
optimizer = RMSprop(lr=0.01,decay=1e-6)
model_rnn.compile(loss='binary_crossentropy', optimizer=optimizer)
X_train = X_train.reshape((1,50,20))
y_train = y_train.reshape((1,50,109))
model_rnn.fit(X_train,y_train, batch_size=1, epochs=200)
我有两个问题:
当我拟合模型时,shuffle=False 重要吗?
当我定义 LSTM 时,是否应该将有状态选项设置为 True?
我已经为一个用户获得了不错的表现。我想对所有用户使用相同的方法。但我不知道如何为所有用户构建输入。
比如我想学习老用户的序列,预测他的下一个序列, 我会被迫为每个用户训练 LSTM 吗?或者我可以在一个 LSTM 中学习每个用户的时间序列序列? 特别是如果我使用一个 LSTM 并且我想预测一个用户的下一个序列,模型如何预测好句子,就像它不知道训练数据上的这个旧序列一样。
请注意,重要的是要考虑序列用户在它们之间是独立的。
感谢您的帮助
当我拟合模型时,shuffle=False 是否重要?
不,这并不重要,除非您将有状态设置为 True。请在下面查看下一个问题的答案。
定义 LSTM 时是否应该将有状态选项设置为 True?
LSTM 具有单元格,因此根据定义是有状态的(与 Keras 中使用的有状态含义不同)。 Fabien Chollet 给出了状态性的定义:
stateful: Boolean (default False). If True, the last state for each sample at index i in a batch will be used as initial state for the sample of index i in the following batch.
因此,如果您在 Keras 中将 LSTM 设置为无状态,则单元状态会在每个序列处重置。设置有状态模式后,所有状态都会传播到下一批。这意味着位于索引 i 的样本的状态 X_{i} 将用于下一批样本 X_{i+bs} 的计算,其中 bs 是批量大小(无改组)。
请注意,默认情况下,Keras 会打乱(排列)样本 X,并且 X_{i} 和 X_{i+1} 之间的依赖关系会丢失。因此,如果将 stateful 选项设置为 True,请确保设置 shuffle=False
.
我想学习旧用户序列并预测他的下一个序列,我会被迫为每个用户训练一个LSTM吗?或者我可以在ONE LSTM中学习每个用户的时间序列序列?
我相信,你需要一个 LSTM,因为它对一个用户来说效果很好。您可以像为一个用户所做的那样,将所有用户的所有序列视为您的训练数据。