我有一个具有多个输入功能和一个输出(分类)的时间序列。我想创建一个可以预测每一步输出的模型。
我的数据如下:
x:[[0.4,0.8,-1],[1,1.6,-0.2],....]
y:[[1],[0],...]
因此,当给定单个特征向量时,我希望模型输出0或1。该特征向量不是任何类型的序列,因为这只是简单的时间序列。
我有以下问题:
由于Keras要求将数据格式设置为(batch_size, time_steps, num_features)
,并且我已经修复了num_features = 3
,所以我应该为batch_size
和time_steps
输入什么?
我应该为stateful
的值输入什么?由于我的数据是按照特定的顺序排列的,因此列表中的第一个事件排在第一位,第二和第三个依次出现,依此类推,因此我假设我将stateful = True
放在了位置?
答案 0 :(得分:0)
我不确定,但是您的batch_size可以自动设置,time_steps等于功能集的数量,因此对于[[0.4,0.8,-1]],其1为[[0.4,0.8,-1], [1,1.6,-0.2]] 2等。尝试将数据重塑为(shape [0],3)。
答案 1 :(得分:0)
如果您刚刚开始训练LSTM模型,建议您使用stateful=False
。一旦您对输入形状和LSTM的工作方式更加满意,就可以考虑使用stateful=True
。您可以详细了解here。
话虽如此,Keras要求将数据格式化为(num_samples, time_stepss, num_features)
。 batch_size
是您要拟合模型时设置的参数。实际上,batch_size
和time_steps
都是超参数,您可能需要一周,然后看看哪个参数会带来更好的性能。因此,首先确定time_steps
,然后确定样本是否重叠。
例如,您可以决定创建一个time_steps=4
且每个样本之间有2个time_step重叠的样本:
x [0],x [1],x [2],x [3]-> y [0],y [1],y [2],y [3]
x [2],x [3],x [4],x [5]-> y [2],y [3],y [4],y [5]
x [4],x [5],x [6],x [7]-> y [4],y [5],y [6],y [7]
...
在固定time_steps
和重叠的情况下,您将获得总计num_samples
。然后,您可以使用model.fit()
(例如32、64等)将数据输入到batch_size
中。
如果要避免编写代码来重塑数据,可以使用Keras的TimeseriesGenerator。请注意,time_steps
使用长度,stride
确定重叠。