Каков временной шаг в слоях LSTM от Keras? и как выбрать значение для этого параметра? - PullRequest
0 голосов
/ 26 февраля 2020

У меня проблемы с пониманием параметра "временной шаг" в слое LSTM. Я нашел некоторые значения, но сейчас я очень смущен. Некоторые упоминают, что это объем данных на размер пакета, который входит в модель во время обучения. Другие, с другой стороны, говорят, что это число вхождений ячейки в слое LSTM, в то время как состояния передаются из одной ячейки в другую.

Дело в том, что у меня есть следующая форма обучающих данных:

(sequences, number of frames per sequence, width, height, channel = 1)
(2000, 5, 80, 80, 1)

Моя модель должна прогнозировать следующую последовательность кадров, в данном случае 5 будущих кадров. Модель состоит из вариационного автоэнкодера, сначала я использую сверточные 3D-слои для сжатия последовательностей из 5 кадров, затем я изменяю размер выходных данных, чтобы я мог войти в слой LSTM, который принимает только (пакетные, временные шаги, функции).

Model: "sequential"
____________________________________________________________________________________________________
Layer (type)                                 Output Shape                            Param #        
====================================================================================================
conv3d (Conv3D)                              (None, 2, 27, 27, 32)                   19392          
____________________________________________________________________________________________________
batch_normalization (BatchNormalization)     (None, 2, 27, 27, 32)                   128            
____________________________________________________________________________________________________
conv3d_1 (Conv3D)                            (None, 1, 14, 14, 32)                   2654240        
____________________________________________________________________________________________________
batch_normalization_1 (BatchNormalization)   (None, 1, 14, 14, 32)                   128            
____________________________________________________________________________________________________
conv3d_2 (Conv3D)                            (None, 1, 7, 7, 64)                     3211328        
____________________________________________________________________________________________________
batch_normalization_2 (BatchNormalization)   (None, 1, 7, 7, 64)                     256            
____________________________________________________________________________________________________
flatten (Flatten)                            (None, 3136)                            0              
____________________________________________________________________________________________________
reshape (Reshape)                            (None, 4, 784)                          0              
____________________________________________________________________________________________________


lstm (LSTM)                                  (None, 64)                              217344         
____________________________________________________________________________________________________
repeat_vector (RepeatVector)                 (None, 4, 64)                           0              
____________________________________________________________________________________________________
lstm_1 (LSTM)                                (None, 4, 64)                           33024          
____________________________________________________________________________________________________
time_distributed (TimeDistributed)           (None, 4, 784)                          50960          
____________________________________________________________________________________________________
reshape_1 (Reshape)                          (None, 1, 7, 7, 64)                     0              
____________________________________________________________________________________________________


conv3d_transpose (Conv3DTranspose)           (None, 2, 14, 14, 64)                   6422592        
____________________________________________________________________________________________________
batch_normalization_3 (BatchNormalization)   (None, 2, 14, 14, 64)                   256            
____________________________________________________________________________________________________
conv3d_transpose_1 (Conv3DTranspose)         (None, 4, 28, 28, 32)                   5308448        
____________________________________________________________________________________________________
batch_normalization_4 (BatchNormalization)   (None, 4, 28, 28, 32)                   128            
____________________________________________________________________________________________________
conv3d_transpose_2 (Conv3DTranspose)         (None, 8, 84, 84, 1)                    19361          
____________________________________________________________________________________________________
batch_normalization_5 (BatchNormalization)   (None, 8, 84, 84, 1)                    4              
____________________________________________________________________________________________________
cropping3d (Cropping3D)                      (None, 8, 80, 80, 1)                    0              
____________________________________________________________________________________________________
cropping3d_1 (Cropping3D)                    (None, 5, 80, 80, 1)                    0              
====================================================================================================

Я наконец-то использовал слой RESHAPE, чтобы попасть в слой LSTM с формой (партия, 4, 784). Другими словами, я назвал timestpe = 4. Я думаю, что это должно быть 5, или не обязательно должно быть равно числу кадров, которые я хочу предсказать.

Каково истинное значение временного шага в этом случае ? Нужно ли упорядочивать значения моих слоев? Я очень ценю вашу поддержку.

С другой стороны, я имею в виду применение сверточных слоев к каждому кадру, и уже не ко всей 5-кадровой последовательности, а по кадрам, а затем подключите выходы сверточные слои со слоями LSTM, наконец, соединяют выходные состояния слоев LSTM каждого кадра, соблюдая порядок кадров, в этом случае я рассматриваю использование timestpe = 1.

1 Ответ

0 голосов
/ 26 февраля 2020

Я назвал timestpe = 4. Я думаю, это должно быть 5, или не обязательно должно быть равным количеству кадров, которые я хочу предсказать.

Вы правы. Временной шаг не равен числу кадров, которые вы хотите предсказать.

Давайте создадим его в удобном для языка описании.

По существу, временной шаг - это количество единиц (секунд / минут / часов / дней / кадров в видео и т. Д. c.), Которое используется для прогнозирования будущих шагов.

Например, вы хотите предсказать цену акций с учетом последних 5 дней. В этом случае временной шаг = 5, где T-5 = current_day - 5, T-4 = current_day - 4 et c. Обратите внимание, что текущий_день здесь будет похож на «будущий день», например, «прогнозирование заранее» на сегодня.

Вы хотите предсказать, возможно, цену акции в текущий день. В этом случае вы должны одностадийный прогноз . Однако вы можете также прогнозировать цену акций в текущий день, завтра и послезавтра. То есть прогнозировать T, T + 1, T + 2 с учетом T-5, T-4, T-3, T-2, T-1. Признанная номенклатура для второго случая называется multi -step-прогноз .

Обратите внимание, что временной шаг, строго связанный с «прошлым», не связан с вычислением для многошагового прогноза .

Очевидно, что в соответствии с вашей проблемой почти всегда бывает так, что для многошагового прогноза вам может понадобиться учесть больший «прошлый» кадр, то есть увеличить количество временных шагов, чтобы помогите вашему LSTM захватить больше корреляции данных.

Если бы вы связали это с объемом данных в пакете, вы можете считать размер пакета 2 равным 2 фрагментам данных, в которых [T-5, T-4, T-3, T-2, T-1] взяты, чтобы предсказать T. Следовательно, 2 фрагмента формы ([T-5, T-4, T-3, T-2, T-1 ], [T]).

Когда вы готовите данные и хотите предсказать следующий кадр, конечно, вам нужен точный идеальный порядок для ваших прошлых значений (T-5, T-4 ...) внутри куска . То, что вам не нужно, это иметь точные последовательные фрагменты из видео, скажем.

Другими словами, вы можете иметь фрагмент, подобный описанному выше для видео 1, фрагмент из видео 9 и т. Д. c.

...