Подтвердить что ты не робот

Вход в сетевой тензор LSTM

У меня есть временной ряд длины 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?

Спасибо

4b9b3361

Ответ 1

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

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

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