#python #machine-learning #keras #lstm
Вопрос:
Я пытаюсь присоединиться к ансамблю алгоритмов ML и LSTM (RNN). Однако у меня возникают проблемы с объединением их всех вместе, потому что LSTM имеет 3-мерные [n_samples, временные интервалы, n_features], в то время как алгоритмы ML имеют 2-мерные массивы, и когда я пытаюсь обучить оценщиков, это приводит к следующей ошибке:
expected ndim=2, found ndim=3
Вот код, который у меня есть до сих пор.
#Initially, the LSTM model was created and reshaped into 3-dimensional arrays
#split into train and test sets
n_train_days = 176920
train = dataset[:n_train_days, :]
test = dataset[n_train_days:, :]
train_X, train_y = train[:, :-1], train[:, -1]
test_X, test_y = test[:, :-1], test[:, -1]
# reshape input to be 3D [samples, timesteps, features]
train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))
test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)
model = Sequential()
model.add(LSTM(10, activation='relu', input_shape=(train_X.shape[1], train_X.shape[2])))
#model.add(LSTM(10, input_shape=(1, look_back)))
model.add(Dense(1, activation='linear'))
opt = Adam(learning_rate=0.01)
model.compile(loss='mse', optimizer=opt)
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=50)
#history =model.fit(train_X, train_y, epochs=30, batch_size=72, validation_data=(test_X, test_y), verbose=2, callbacks=[es])
model.fit(train_X, train_y, epochs=30, batch_size=72, validation_data=(test_X, test_y), verbose=2, callbacks=[es])
#Then, I applied the ensemble:
#I tried to reshape into 2-dimensional arrays:
#reshape into 2d dimensional
train_X, train_y = train[:, :-1], train[:, -1]
test_X, test_y = test[:, :-1], test[:, -1]
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)
estimators = {'rf': DecisionTreesRegressor(),
'knn': KNeighborsRegressor(),
'svr': SVR(kernel='rbf'),
'rnn': model}
for name, estimator in estimators.items():
estimator = estimator.fit(train_X, train_y)
ИЗМЕНИТЬ: Я пытался использовать эту технику
train_X = train_X.reshape((nsamples,nx*ny))
train_X.shape
Но я получаю ошибку, она меняется между первой ошибкой и второй ошибкой.
Input 0 of layer sequential is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 10)