这个问题非常简单,我已经在网上广泛搜索了解决方案。我该如何重塑数据框架以使用自定义时间步长来喂养LSTM?
look_back=90train_X = np.reshape( train_dataset, (train_dataset.shape[0], look_back, train_dataset.shape[1]))test_X = np.reshape( test_dataset, (test_dataset.shape[0], look_back, `test_dataset.shape[1]))
以上代码会抛出以下错误 ValueError: cannot reshape array of size 446208 into shape (3984,90,112)那么,我如何将回顾期更改为变量而不使其为1,从而使LSTM的记忆功能失效呢?
编辑使用下面提供的解决方案,我将我的代码更改为
## 训练测试分割train_split = 0.8train_size = int(n_sample*train_split)X_train = X[:train_size] # (train_size, n_features)X_test = X[train_size:] # (n_sample-train_size, n_features)print(X_train.shape, X_test.shape) y_train = y[:train_size] # (train_size,)y_test = y[train_size:] # (n_sample-train_size,)print(y_train.shape, y_test.shape) look_back = 90y_train = y_train[look_back:] # (train_size-look_back,)y_test = y_test[look_back:] # ((n_sample-train_size),)print(y_train.shape, y_test.shape)X_train = view_as_windows(X_train, (look_back,n_features))[:-1,0] # (train_size-look_back, look_back, n_features)X_test = view_as_windows(X_test, (look_back,n_features))[:-1,0] # ((n_sample-train_size)-look_back, look_back, n_features)print(X_train.shape, X_test.shape)
现在它运作得非常好!
回答:
这是一个我建议你用来创建滑动窗口的技巧…
import numpy as npfrom skimage.util.shape import view_as_windows## 创建虚拟数据n_sample = 2000n_features = 5X = np.tile(np.arange(n_sample), (n_features,1)).TX_train = X[:int(n_sample*0.8)]X_test = X[int(n_sample*0.8):]## 创建窗口look_back = 90X_train = view_as_windows(X_train, (look_back,n_features), step=1)[:-1,0]X_test = view_as_windows(X_test, (look_back,n_features), step=1)[:-1,0]print(X_train.shape, X_test.shape) # (1510, 90, 5) (310, 90, 5)