Передать 4D массив в lstm в керасе - PullRequest
0 голосов
/ 29 января 2020

У меня есть data(X) с формой (451, 4, 2, 9), где sample number = 451, номер серии в time = 4, height (two series) = 2, width (each series has features) = 9. Итак, у меня есть таблица 2 * 9, которая распределена по времени.
Форма y имеет вид (451, 2, 1).

Мой X имеет вид:

array([[[2182000,       0,       0,       0,       1,       0,       0,
               0,       0],
        [ 416000,       0,       0,       0,       1,       0,       0,
               0,       0]],

       [[1724500,       0,       0,       0,       1,       0,       0,
               0,       0],
        [ 905000,       0,       0,       0,       1,       0,       0,
               0,       0]],

       [[1818500,       0,       0,       0,       1,       0,       0,
               0,       0],
        [ 871000,       0,       0,       0,       1,       0,       0,
               0,       0]],

       [[1473000,       0,       0,       0,       1,       0,       0,
               0,       0],
        [ 929500,       0,       0,       0,       1,       0,       0,
               0,       0]]])

и мой у:

array([[1941500],[1341500]]) #for two parallel series i have two output

Вот модель, которую я хочу обучить:

# define model
model = Sequential()
model.add(LSTM(100, activation='relu', return_sequences=True, input_shape=(n_steps,X.shape[2],X.shape[3])))
model.add(LSTM(100, activation='relu'))
model.add(Dense(X.shape[2],X.shape[3]))
model.compile(optimizer='adam', loss='mse')
# fit model
model.fit(X, y, epochs=400, verbose=0)
# demonstrate prediction
x_input = np.array([
    [[1427500,       0,       0,       0,       0,       0,       0, 0,       0],
    [ 371000,       0,       0,       0,       0,       0,       0, 0,       0]], 

    [[1959000,       0,       0,       0,       0,       1,       0, 0,       0],
    [ 569000,       0,       0,       0,       0,       1,       0, 0,       0]],

    [[2275000,       0,       0,       0,       0,       1,       0, 0,       1],
    [ 511500,       0,       0,       0,       0,       1,       0,  0,       1]], 

    [[4109000,       0,       0,       1,       0,       1,       0, 0,       1],
    [1357500,       0,       0,       1,       0,       1,       0, 0,       1]]
    ])
x_input = x_input.reshape((1, n_steps,X.shape[2],X.shape[3]))
yhat = model.predict(x_input, verbose=0)
print(yhat)

Я хочу знать, как передать массив 4d в качестве входных данных в первом слое LSTM, Я не могу выровнять его, как X.shape [2] * X.shape [3], потому что это два разных временных ряда (каждый с 9 функциями), и я хочу два разных прогноза для обоих временных рядов.

...