Я хочу использовать нейронную сеть LSTM с keras для прогнозирования групп временных рядов, и у меня возникают проблемы с тем, чтобы модель соответствовала тому, что я хочу. Размеры моих данных являются:Размеры, не соответствующие в keras LSTM model
вход Тензор: (data length, number of series to train, time steps to look back)
выход Тензор: (data length, number of series to forecast, time steps to look ahead)
Примечание: Я хочу, чтобы сохранить размеры точно так, не транспозиции.
Фиктивный код данных, который воспроизводит проблемы является:
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, TimeDistributed, LSTM
epoch_number = 100
batch_size = 20
input_dim = 4
output_dim = 3
look_back = 24
look_ahead = 24
n = 100
trainX = np.random.rand(n, input_dim, look_back)
trainY = np.random.rand(n, output_dim, look_ahead)
print('test X:', trainX.shape)
print('test Y:', trainY.shape)
model = Sequential()
# Add the first LSTM layer (The intermediate layers need to pass the sequences to the next layer)
model.add(LSTM(10, batch_input_shape=(None, input_dim, look_back), return_sequences=True))
# add the first LSTM layer (the dimensions are only needed in the first layer)
model.add(LSTM(10, return_sequences=True))
# the TimeDistributed object allows a 3D output
model.add(TimeDistributed(Dense(look_ahead)))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.fit(trainX, trainY, nb_epoch=epoch_number, batch_size=batch_size, verbose=1)
Этот trows:
Исключение: Ошибка при проверке целевой модели: ожидаемое timedistributed_1, чтобы иметь форму (Не, 4 , 24), но получил массив с формой (100, 3, 24)
Проблема заключается в определении слоя TimeDistributed
.
Как определить слой TimeDistributed
так, чтобы он собирал и тренировал?
Я делаю транспозицию, потому что для одного временного ряда эта транспозиция делает прогноз намного точнее. Я получил эту идею, следуя этому руководству: http://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/ Но, я думаю, есть еще одна работа, которую нужно сделать для многих, многие отношения –