如何解决为什么我的时间序列数据帧会限制我想在LSTM中使用的时间步数?
我需要帮助来了解如何精确地重塑LSTM的输入数据。首先,我的时间序列数据是熊猫数据框的形式:
它具有以下形状:(36356,9)
。我将数据框分为训练集和测试集,例如:X_train.shape = (29084,7)
,X_test.shape = (7272,7)
,y_train.shape = (29084,)
和y_test.shape = (7272,)
。
问题1:我知道我必须将(samples/rows,timesteps,features)
的2D X数据重塑为3D。但是我也必须将y数据重塑为3D吗?
问题2:对于X数据和y数据,我知道它们2D形状的数组值必须与3D形状的数组值匹配。因此,假设我将X_train数据重塑为(29084,1,7)
,并将X_test数据重塑为(7272,7)
。 X_train.shape[0]
的因子为1,2,4,7271,14542,and X_train.shape[0]
。 X_test.shape[0]
的因子为1,6,8,12,18,24,...,3636,and X_test.shape[0]
。共同因素是1,and 4
。所以我的数据集只允许我确定1、2和4的可能时间步长正确吗?也就是说,我必须重塑X_train.shape [0]和X_test.shape [0]的形状,以除以相同的时间步长数,正确。 y_train.shape [0]和y_test.shape [0]同样适用吗?
问题3:如果我可以有更大的时间步伐,还可以如何重塑X数据和y数据?
如果有帮助,我的LSTM构造如下:
batch_size = X_train.shape[0]
model = Sequential()
model.add(Bidirectional(LSTM(32,return_sequences = True,stateful = False),input_shape = (X_train.shape[1],X_train.shape[2])))
model.add(Dropout(0.2))
model.add(Bidirectional(LSTM(16,return_sequences = True)))
model.add(Dropout(0.2))
model.add(Dense(1,activation = 'sigmoid'))
es = EarlyStopping(monitor = 'val_loss',patience = 3)
model.compile(loss = 'binary_crossentropy',optimizer = 'adam',metrics = ['Recall'])
model.fit(X_train,y_train,batch_size = batch_size,epochs = 360,verbose = 0,callbacks = [es],validation_data = (X_test,y_test),shuffle = True)
谢谢您的帮助。
解决方法
Keras LSTM输入形状(Doc):
inputs: A 3D tensor with shape [batch,timesteps,feature]
答案1:
不,您不必重塑y数据,因为它代表了整个模型的输出形状,而不是LSTM层的输出。但是,y数据的形状应与模型最后一层的输出相对应,这已经在您的代码中完成了。但是,如果将数据分成较小的批次,则y数据应反映出这一点。
答案2:
似乎数据的第一个维度,即36356是您的时间步维度。这意味着您有1个输入时间序列数据,其中36356个timstep记录每个都有7个功能。因此,要馈入RNN,您的形状应为(1,36356,7)。
此外,您可以将36356行分成较小的部分,这样可以增加批号-例如,64批568行,即形状变为(64,568,7)。但是,这还需要将y数据也分成较小的批次。
答案3:
您可以将当前的2D数组包装在另一个数组中,使其成为3D,即(1,36356,7)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。