My input is simply a csv file with 339732 rows and two columns :
Reshape input for LSTM:
X = array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])
X_train = X.reshape(1, 3, 3) # X.reshape(samples, timesteps, features)
For timesteps != 1
, you can use the below function (adapted from here)
import numpy as np
def create_dataset(dataset, look_back=1):
dataX, dataY = [], []
for i in range(len(dataset)-look_back+1):
a = dataset[i:(i+look_back), :]
dataX.append(a)
dataY.append(dataset[i + look_back - 1, :])
return np.array(dataX), np.array(dataY)
Examples
X = np.reshape(range(30),(3,10)).transpose()
array([[ 0, 10, 20],
[ 1, 11, 21],
[ 2, 12, 22],
[ 3, 13, 23],
[ 4, 14, 24],
[ 5, 15, 25],
[ 6, 16, 26],
[ 7, 17, 27],
[ 8, 18, 28],
[ 9, 19, 29]])
create_dataset(X, look_back=1 )
(array([[[ 0, 10, 20]],
[[ 1, 11, 21]],
[[ 2, 12, 22]],
[[ 3, 13, 23]],
[[ 4, 14, 24]],
[[ 5, 15, 25]],
[[ 6, 16, 26]],
[[ 7, 17, 27]],
[[ 8, 18, 28]],
[[ 9, 19, 29]]]),
array([[ 0, 10, 20],
[ 1, 11, 21],
[ 2, 12, 22],
[ 3, 13, 23],
[ 4, 14, 24],
[ 5, 15, 25],
[ 6, 16, 26],
[ 7, 17, 27],
[ 8, 18, 28],
[ 9, 19, 29]]))
create_dataset(X, look_back=3)
(array([[[ 0, 10, 20],
[ 1, 11, 21],
[ 2, 12, 22]],
[[ 1, 11, 21],
[ 2, 12, 22],
[ 3, 13, 23]],
[[ 2, 12, 22],
[ 3, 13, 23],
[ 4, 14, 24]],
[[ 3, 13, 23],
[ 4, 14, 24],
[ 5, 15, 25]],
[[ 4, 14, 24],
[ 5, 15, 25],
[ 6, 16, 26]],
[[ 5, 15, 25],
[ 6, 16, 26],
[ 7, 17, 27]],
[[ 6, 16, 26],
[ 7, 17, 27],
[ 8, 18, 28]],
[[ 7, 17, 27],
[ 8, 18, 28],
[ 9, 19, 29]]]),
array([[ 2, 12, 22],
[ 3, 13, 23],
[ 4, 14, 24],
[ 5, 15, 25],
[ 6, 16, 26],
[ 7, 17, 27],
[ 8, 18, 28],
[ 9, 19, 29]]))
Setting timesteps = 1
(since, I want one timestep for each instance) and reshaping the X_train and X_test as:
import numpy as np
X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))
This worked!