Использование TFLite для потокового вывода LSTM с несколькими LSTM - PullRequest
1 голос
/ 22 января 2020

Я пытаюсь перенести модель LSTM на TFLite, где мои слои LSTM работают на разных скоростях из-за промежуточного пула:

Conv1d(kernel_size=5)
Pool(2)
LSTM()
Conv1d(kernel_size=5)
Pool(2)
LSTM()

Эта модель LSTM используется для вывода потоковых данных из аудио, где первый уровень получает куски размера N. Каждый LSTM должен поддерживать свое собственное скрытое состояние и выполнять прямую передачу и пересылать свои результаты на следующий уровень, когда он имеет полный буфер (размер ядра свертки + 1 для пула) , Например:

T=6: 6 frames of audio
LSTM1 forward -> lstm1_t0
LSTM1 hidden_state -> new_hidden_state
LSTM2 buffer: [lstm1_t0]
T=8:
LSTM1 forward -> lstm1_t1
LSTM1 hidden_state -> new_hidden_state
LSTM2 buffer: [lstm1_t0, lstm1_t1]
...
T=16
LSTM1 forward -> lstm1_t5
LSTM1 hidden_state -> new_hidden_state
LSTM2 buffer: [lstm1_t0, ..., lstm1_t5] <- length 6
LSTM2 forward -> lstm2_t0
LSTM2 hidden_state -> new_hidden_state
LSTM2 buffer: [lstm1_t1, ..., lstm1_t5] <- length 5

В идеале я бы хотел выполнить sh это с помощью одной модели TFLite, где самая простая абстракция, о которой я могу подумать, - это исходные (TF1) объекты сеанса, в которых я просто хотел бы выполнить sess. запустить ([]) с необходимыми тензорами. Возможно ли что-нибудь подобное в TFLite? В противном случае создается впечатление, что мне нужно экспортировать модель .tflite для каждого блока conv / pool / LSTM и управлять ими как отдельными моделями.

Кто-нибудь сталкивался с подобной проблемой раньше?

Спасибо!

...