Keras 的 LSTM 中的时间步长是多少?
Posted
技术标签:
【中文标题】Keras 的 LSTM 中的时间步长是多少?【英文标题】:What is the timestep in Keras' LSTM? 【发布时间】:2019-05-29 07:07:59 【问题描述】:我在 Keras 中实现 LSTM 时遇到了一些问题。
我的训练集结构如下:
序列数:5358 每个序列的长度为300 序列的每个元素都是一个包含 54 个特征的向量我不确定如何为有状态 LSTM 调整输入。
按照本教程:http://philipperemy.github.io/keras-stateful-lstm/,我创建了子序列(在我的例子中,有 1452018 个子序列,window_size = 30)。
为有状态 LSTM 的输入重塑数据的最佳选择是什么?
在这种情况下,输入的时间步长是什么意思?为什么?
batch_size 与时间步长有关吗?
【问题讨论】:
这里 300 是您的时间步长。基本上你有 5358 个样本 300 个时间步长,每个都有 54 个特征 所以如果我不创建子序列,我可以使用形状为 (5358,300, 54) 的数据,对吧?但如果我这样做呢?在这种情况下,batch_size 是如何工作的? 那些带windows的教程真的是开始学习LSTM的最糟糕的方式。批量大小是您传递给模型以进行一次梯度下降更新的序列数。 假设你真的想要windows,并且你对1452018个子序列的计算是正确的,你的数据形状是(1452018,30,54)
。
【参考方案1】:
我不确定如何为有状态 LSTM 调整输入。
LSTM(100, statefull=True)
但在使用有状态 LSTM 之前,请先问问自己我真的需要 statefull
LSTM 吗?有关详细信息,请参阅 here 和 here。
为有状态 LSTM 重塑数据的最佳选择是什么 输入?
这真的取决于手头的问题。但是,我认为您不需要重塑,只需将数据直接输入 Keras:
input_layer = Input(shape=(300, 54))
在这种情况下,输入的时间步长是什么意思?为什么?
在您的示例中,时间戳为 300。有关时间戳的更多详细信息,请参阅 here。在下图中,我们将 5 个时间戳输入到 LSTM 网络中。
batch_size 与时间步长有关吗?
不,它与 batch_size 无关。更多关于 batch_size 的细节可以在here找到。
这是基于您提供的描述的简单代码。它可能会给你一些直觉:
import numpy as np
from tensorflow.python.keras import Input, Model
from tensorflow.python.keras.layers import LSTM
from tensorflow.python.layers.core import Dense
x_train = np.zeros(shape=(5358, 300, 54))
y_train = np.zeros(shape=(5358, 1))
input_layer = Input(shape=(300, 54))
lstm = LSTM(100)(input_layer)
dense1 = Dense(20, activation='relu')(lstm)
dense2 = Dense(1, activation='sigmoid')(dense1)
model = Model(inputs=input_layer, ouputs=dense2)
model.compile("adam", loss='binary_crossentropy')
model.fit(x_train, y_train, batch_size=512)
【讨论】:
感谢您的回答。所以,时间步长是要考虑的子序列的长度,对吗?为什么将时间步设置为等于序列长度? 也许我有点不准确,但为了澄清我的问题,每个序列都是独立的。 @maccN 时间戳和序列长度都是一样的。 300 个时间戳对于 LSTM 学习来说并不算多。如果我在你身边,只需使用无状态 LSTM。 序列表示从10秒视频的每一帧中提取的一些点的位置。我认为有状态的 LSTM 在这个任务上比无状态的 LSTM 表现得更好。 查看这里了解有状态和无状态的优缺点machinelearningmastery.com/…以上是关于Keras 的 LSTM 中的时间步长是多少?的主要内容,如果未能解决你的问题,请参考以下文章