python - 关于 LSTM 输入中使用的术语的问题 - seq_length vs context_size 用于滑动窗口方法
问题描述
我有一个n向量序列的时间序列,我需要使用滑动窗口方法将其馈送到 LSTM。
在我在线阅读的不同资源中,seq_length
通常称为窗口长度[或 LSTM 单元的数量],并context_size
定义为 LSTM 在一个时间步长的输入大小。(例如,一个时间步长一个输入向量)。
在任何给定的时间点t,我想将点x_{tm}, ..., x_{t-1},...,x_{t}传递给 LSTM,然后是密集层,并在每个 tilmestep 处预测分类目标属性。
如果我想遵循滑动窗口方法,是否需要将输入数据显式拆分为大小为m的窗口?
例如:
[x_{tm}, ..., x_{t-1},...,x_{t}], [x_{t-m+1}, ..., x_{t},...,x_{t+1}], [x_{t-m+2}, ..., x_{t+1}, x_{t+2}]等。
或者,我可以将输入数据拆分为不重叠的块[x_{tm}, ..., x_{t-1},...,x_{t}], [x_{t+1}, ..., x_{t+ m-1},x_{t+m}]等,而是调整 context_size 的大小?
embeds = embeds.unfold(1, context_size, 1) # Keeping the step size to be 1
embeds = embeds.view(embeds.size(0), embeds.size(1), -1)
有没有更好的方法来实现时间序列数据的滑动窗口方法?
解决方案
默认情况下,LSTM 在数据上递归,因为时间 t 的预测将取决于所有过去(取决于内存)。在这种情况下,您似乎希望时间 t 的输入取决于过去的 m+1 个实例。如果是这样,您不需要循环网络,您可以简单地使用线性并在每个时刻输入滑动窗口。但是,如果您使用的是循环网络,则不需要一次又一次地传递相同的输入。
推荐阅读
- c++ - CUDA C++链接错误未定义参考threadIdx.x和blockDim.x
- c# - 如何使用组合框/下拉列表显示 DataGrid 属性,该组合框/下拉列表根据另一个文本框属性的输入而变化
- php - 使用 PHP Ajax 加载相同的行从数据库中加载更多搜索的行
- reactjs - 如何使全选复选框始终在 office-ui-fabric-react DetailsList 中可见
- java - Java for循环,从arraylist获取对象参数
- for-loop - 循环 kotlin 时不会更改数字结果
- javascript - AngularJS - 引用具有“。”的 $scope 名称/ng-model 在里面
- mysql - 无法使用 window_functions 在 MySQL 中验证查询输出
- shell - 使用 Mosh 而不是 SSH
- python - 正则表达式错误显示一个空列表,尽管模式存在于歌词字符串中