Почему model.predict дает 3 выхода? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь использовать Keras для прогнозирования одномерного временного ряда.

Модель NN выглядит как

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d (Conv1D)              (None, None, 25)          150       
_________________________________________________________________
lstm (LSTM)                  (None, None, 1024)        4300800   
_________________________________________________________________
dropout (Dropout)            (None, None, 1024)        0         
_________________________________________________________________
lstm_1 (LSTM)                (None, None, 1024)        8392704   
_________________________________________________________________
dropout_1 (Dropout)          (None, None, 1024)        0         
_________________________________________________________________
lstm_2 (LSTM)                (None, None, 1024)        8392704   
_________________________________________________________________
dropout_2 (Dropout)          (None, None, 1024)        0         
_________________________________________________________________
lstm_3 (LSTM)                (None, None, 1024)        8392704   
_________________________________________________________________
dropout_3 (Dropout)          (None, None, 1024)        0         
_________________________________________________________________
dense (Dense)                (None, None, 1)           1025      
=================================================================
Total params: 29,480,087
Trainable params: 29,480,087
Non-trainable params: 0
_________________________________________________________________

Мои данные отображаются с использованием предыдущих 3 значений ряд, чтобы предсказать следующее. Таким образом, мой тестовый набор данных выглядит так:

list(dataset.as_numpy_iterator())
[array([[[ 0.        ],
         [ 0.02346429],
         [ 0.04559132]],

        [[ 0.        ],
         [ 0.02161974],
         [ 0.13014923]],

        [[ 0.        ],
         [ 0.10623277],
         [-0.02918068]],

        [[ 0.        ],
         [-0.12240955],
         [-0.21869095]]])]

Все хорошо, но когда я передаю это в model.predict(dataset), выводится результат

array([[[ 0.01316399],
        [ 0.03728709],
        [ 0.06164959]],

       [[ 0.01316399],
        [ 0.03512047],
        [ 0.1292857 ]],

       [[ 0.01316399],
        [ 0.1172413 ],
        [-0.01671433]],

       [[ 0.01316399],
        [-0.10654409],
        [-0.16395506]]], dtype=float32)

и форма для этого примера это (4, 3, 1)

Я ожидал получить только один прогноз для каждого триплета входных объектов, учитывая, что последний слой моего NN является плотным с одной единицей. Почему у меня три вывода в прогнозе для каждого учебного примера?

1 Ответ

1 голос
/ 21 апреля 2020

В последнем слое LSTM установите аргумент return_sequence = False.

LSTM(..., return_sequences=False)
...