2016-01-28 7 views
14

xiはそれぞれd次元のベクトル、つまりxi =(x0i、x1i、...、xdi)の長さt(x0、...、xt) 。したがって、入力したXの形状は[batch_size、d]LSTMネットワークのテンソルへの入力

です。テンソルフローLSTMの入力は、[batchSize、hidden_​​size]のサイズでなければなりません。 私の質問は、LSTMに自分の時系列をどのように入力すればよいのですか?私が考えていた解決策の1つは、サイズ[d、hidden_​​size]の追加のウェイト行列Wを持ち、X * W + BでLSTMを入力することです。

これは正しいのでしょうか? netwoרk?

おかげ

+1

Xについて議論するときは、batch_sizeについて言及しますが、LSTMについては、batchSizeについて言及します。これらは同じですか? – Sycorax

答えて

15

あなたの直感は正しいです。あなたが必要とするもの(そしてあなたが記述したもの)は、入力ベクトルをLSTMの入力の次元に変換するための埋め込みです。私がそれを達成するために知っている3つの主要な方法があります。

  • あなたが説明するように、追加の重み行列Wとバイアスベクトルbを使って手動でこれを行うことができます。
  • linear()関数from TensorFlow's rnn_cell.py libraryを使用してウェイト行列とバイアスベクトルを自動的に作成することができます。次に、rnn_decoder()ファンクションin Tensorflow's seq2seq.py libraryまたはそれ以外の方法でLSTMを作成するときに、その線形レイヤの出力をLSTMの入力として渡します。
  • Tensorflowに埋め込みを作成し、同じseq2seqライブラリのライン141のembedding_rnn_decoder()関数でLSTMを作成することで、LSTMの入力に自動的に接続することができます。 (オプションの引数なしでこの関数のコードをトレースすると、LSTMだけでなく入力用の線形埋め込みレイヤーを作成し、それらを一緒にフックすることがわかります)

何らかの理由で作成している個々のコンポーネントにアクセスする必要があるため、コードを高レベルに保つために3番目のオプションをお勧めします。

+0

この場合、この3番目の解決策が実際に機能しますか?疎であるが多次元の入力テンソルにembedding_rnn_decoder()を使用できますか?この関数は、1次元の整数または1ホットエンコーディングを与えられた埋め込みを検索しますが、ウェイト行列を使用して入力ベクトルの次元数を変更するだけの方法はありません。 – bschreck

関連する問題