我试图了解pytorch如何为多个功能时间序列数据实现批处理。我正在尝试每个时间步长具有[打开,关闭,高,低,交易量]的股票数据。在Keras中,我可以将多个时间步分批处理,并通过模型进行馈送,以获得下一个时间步长的预测。例如。批量喂入10个时间步并预测第11个时间步的价格。但是在pytorch中,即使我尝试将其批处理在一起,它也会在每个时间步进行预测。我已经看过有关Udacity的教程,并阅读了许多关于pytorch LSTM的论坛和博客,但是它们似乎使用单个功能示例,或者它们也使用1个功能在NLP模型中输入单个字母,这似乎不适用于此。>
据我了解,如果我有如下数据:
data_from_csv = [[time, open, close, high, low, volume],
[1,10,11,15,9,100],
[2,11,12,16,9,100],
[3,12,13,17,9,100],
[4,13,14,18,9,100],
[5,14,15,19,9,100],
[6,15,16,10,9,100]]
我可以制作一个包含多个时间步长的滑动窗口,并将它们分组在一起以通过LSTM。我想在这一点上,我需要弄清楚文档中的以下术语:
功能:例如,这是多少个数据点? [例如,打开,关闭,高,低,成交量]或5?
Input_size:我假设这会为每个功能创建一个LSTM节点,或者在本示例中为5个?
seq_len:这是一批的长度吗?
批次:这是多少个批次或一个批次的长度?
据我了解,在此示例中,将seq_len为2的批处理馈送到LSTM将会是:
使用input_size为5(用于多少个功能)创建LSTM,为它提供10的任意隐藏大小,以使输入大小增加一倍。现在是num_layers 1,batch_first为true(通常是习惯做法),最后是一个线性层,其输出为1,该预测应类似于: Lstm model with 5 inputs and 1 output
如果要从上述数据中创建一个seq_length为2的滑动窗口,则对于batch_size为1,seq_len为2,input_size为5的情况,它的形状应为(1、2、5)。重塑数据,使其看起来如下:
batch_one = [ [ [10,11,15,9,100],
[11,12,16,9,100] ] ]
batch_two = [ [ [11,12,16,9,100],
[12,13,17,9,100] ] ]
当然会有更多批次(本例中为5),因为滑动窗口将一直持续到倒数第二个步骤,因此我可以预测第6个。我也将首先对其进行规范化,但对于示例而言则不是。因此,如果这是批处理的形状,其中seq_length为2表示5个特征,那么我想它会被馈送到LSTM中,并根据输入批处理接收单个预测,而该预测是下一个打开的结果:
当我尝试此操作时,我将获得每个时间步长/ seq_length的预测,而不是像我在Keras中所做的每个批次的预测。这是正常现象吗,还是我实际上每个时间都在喂食而不是批量生产?除了最后的预测,我是否应该放弃所有内容?我要在前进功能中定义此行为吗?