Обработка последовательностей переменной длины в партии в Keras - PullRequest
0 голосов
/ 28 октября 2018

Предположим, у меня есть некоторые данные формы (?, 10).

То есть признаки данных представляют собой последовательности переменной длины, и каждый элемент последовательности выражается 10 числами.

Мы хотим передать это в LSTM, поэтому мы подготавливаем каждую партию длиной (32, m, 10), где m - максимальная длина последовательности примеров в пакете.

Примеры в пакете длины последовательностикороче m дополняются нулями.

Теперь мы хотим передать это в LSTM и хотим, чтобы LSTM прекратил обновлять вывод на входах заполнения.

В Tensorflow это будетбыть сделано через параметр sequence_length его dynamic_rnn.

Как мне добиться того же эффекта в Керасе?

1 Ответ

0 голосов
/ 28 октября 2018

Вам необходимо использовать Masking , который создаст mask , который позволяет LSTM пропускать эти дополненные значения. Из документации:

model = Sequential()
model.add(Masking(mask_value=0., input_shape=(None, 10)))
model.add(LSTM(32))

Приведенный выше LSTM будет пропускать временные шаги, где все 10 функций заполнены нулями. Примечание: если вы возвращаете последовательности, то будет возвращено предыдущее скрытое состояние:

x = [2, 0, 1, 0] # for example
# will produce
y = [h1, h1, h2, h2] # so 0 pads are skipped
# but returning sequences repeats the last hidden state for masked values
...