2016-01-28 4 views
14

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

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

Правильно это или я должен ввести что-то еще в netwo ר к?

Thanks

+1

При обсуждении X вы указываете batch_size, но для LSTM вы указываете batchSize. Это то же самое? – Sycorax

ответ

15

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

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

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

+0

Действительно ли это третье решение работает в этом случае? Можете ли вы использовать embedding_rnn_decoder() для разреженного, но многомерного входного тензора? Похоже, что эта функция будет искать вложение, заданное одномерное целое или однострочное кодирование, но не способ просто изменить размерность входного вектора с использованием весовой матрицы. – bschreck

Смежные вопросы