Как LSTM знает количество временных шагов и функций в сети Conv1D-LSTM? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть сигнал временного ряда (n выборок, каждая выборка имеет 81 временной шаг и 3 функции = nx 81 x 3).Я использую сеть conv1D-LSTM.n_timesteps = 81, n_features = 3. Нормальный LSTM определяет как n_timesteps, так и n_features, однако в сочетании с conv1d они не указываются.

  1. Как LSTM узнает, сколько временных шагов и функций имеется во входных данных для него?

  2. Как LSTM узнает конецпоследовательности для каждой выборки?

  3. Хранятся ли временные шаги и передаются ли они в LSTM или обрабатываются один раз за раз и передаются в LSTM один разшаг за шагом?

  4. Если я включу «сгладить» (ниже), это не удастся.Почему?

  5. Должно ли количество фильтров в conv1d соответствовать количеству фильтров в LSTM?

model = Sequential()

model.add(Conv1D(filters=32, kernel_size=3, activation='relu', input_shape=(n_timesteps,n_features)))
model.add(Conv1D(filters=32, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
#model.add(Flatten())

#model.add(LSTM(units=128, input_shape=(n_timesteps, n_features), return_sequences=True))
model.add(LSTM(units=128, return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(units=64, dropout=0.5, recurrent_dropout=0.5, return_sequences=True))
model.add(LSTM(units=32, dropout=0.5, recurrent_dropout=0.5))
model.add(Dense(16, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(1, activation='sigmoid'))

1 Ответ

1 голос
/ 23 сентября 2019

1 и 2

Все основано на тензорах (вроде матриц, но с любым количеством измерений).

У тензоров есть формы, и все основано на формах.Тензоры ваших данных трехмерны: (samples, time_steps, features).

Бывает, что в одномерных свертках также используются те же трехмерные тензоры: (samples, length, channels).Итак:

  • samples = examples = sequence
  • time_steps = length
  • features = channel

Секрета нет.Данные структурированы, и слои будут использовать эту структуру.Посмотрите на model.summary() и посмотрите количество шагов и функций для каждого слоя.

3

Чередование между слоями отсутствует.

  • Слой conv обработает весь входной тензор и сгенерирует выходной тензор.
  • Следующий слой извлечения возьмет весь этот вывод и выдаст еще один вывод
  • Слой LSTM сделает то же самое, возьмет весь ввод и выведет весь тензор.

4

Если вы сгладите данные, ваши 3D-тензоры (samples, steps, feats) станут 2D-тензорами (samples, something).Нет больше структуры данных, которая может быть понята слоями.

5

Абсолютно нет требований к количеству фильтров или единиц.Единственное, что конечный вывод вашей модели должен иметь ту же форму, что и ваши y_train данные.

Вот мое резюме модели.Похоже, что количество функций изменилось с оригинального 3 (входного) на 32 (для конвоида).Верно ли, что LSTM теперь будет обрабатывать все временные шаги (~ 81) для 32 функций conv1d вместо 3 функций ввода?

Пример сводки:

первый LSTM примет форму ввода (None, 38,32).Это означает, что LSTM будет обрабатывать:

  • 38 шагов
  • 32 функций

Свертки отбрасывают граничные шаги, а максимальное объединение делит пополам шаги.

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d (Conv1D)              (None, 79, 32)            320       
_________________________________________________________________
conv1d_1 (Conv1D)            (None, 77, 32)            3104      
_________________________________________________________________
dropout (Dropout)            (None, 77, 32)            0         
_________________________________________________________________
max_pooling1d (MaxPooling1D) (None, 38, 32)            0         
_________________________________________________________________
lstm (LSTM)                  (None, 38, 128)           82432     
_________________________________________________________________
dropout_1 (Dropout)          (None, 38, 128)           0         
_________________________________________________________________
lstm_1 (LSTM)                (None, 38, 64)            49408     
_________________________________________________________________
lstm_2 (LSTM)                (None, 32)                12416     
_________________________________________________________________
dense (Dense)                (None, 16)                528       
_________________________________________________________________
dropout_2 (Dropout)          (None, 16)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 17        
=================================================================
Total params: 148,225
Trainable params: 148,225
Non-trainable params: 0
_________________________________________________________________```


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...