Вход в ЛСТМ 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 и связывает их вместе.)
Если вам не нужен доступ к отдельным компонентам, которые вы создаете по какой-либо причине, я бы рекомендовал третий вариант, чтобы сохранить ваш код на высоком уровне.