Вход в ЛСТМ tensorflow сети

У меня есть временной ряд длины t (x0,..., xt) каждый из xi является вектором d-размерности, т. е. xi=(x0i, x1i, ...., xdi). Таким образом, мой вход X имеет форму [batch_size, d]

вход для тензорного потока LSTM должен иметь размер [batchSize, hidden_size]. Мой вопрос в том, как я должен вводить свои временные ряды в LSTM. Одно из возможных решений, о котором я думал, - иметь дополнительную матрицу веса, W,размера [d, hidden_size] и вводить LSTM с X*W + B.

Это правильно или я должен ввести что-то еще в netwoרk?

спасибо

1 ответов


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

  • вы можете сделать это вручную с дополнительной матрицей вес W и смещения вектора b Как вы описали.
  • вы можете автоматически создать матрицу веса и векторы смещения с помощью linear() функции от TensorFlow rnn_cell.py библиотека. Затем передайте выход этого линейного слоя как вход вашего LSTM при создании LSTM через rnn_decoder() функции в Tensorflow seq2seq.py библиотека или иначе.
  • или вы могли бы Tensorflow создать это вложение и подключить его к входам вашего LSTM автоматически, создав LSTM через embedding_rnn_decoder() функция в строке 141 той же библиотеки seq2seq. (Если вы отслеживаете код для этой функции без каких-либо дополнительных аргументов вы увидите, что он просто создает линейный слой вложения для ввода, а также LSTM и связывает их вместе.)

Если вам не нужен доступ к отдельным компонентам, которые вы создаете по какой-либо причине, я бы рекомендовал третий вариант, чтобы сохранить ваш код на высоком уровне.