2017-04-01 19 views
0

への入力として、最終的なLSTM状態の提供: 、組み込み環境 - >フォワードLSTM - >後方LSTM - >連結方式の最終状態 - >連結方式の外部埋め込み - > LSTMCNTKは、私は次のようなアーキテクチャを構築しようとしている別のLSTM

i = Input(features) 
e = Embedding(25)(i) 

# Forward and backward LSTM 
h_f = Recurrence(LSTM(25), go_backwards=False)(e) 
h_b = Recurrence(LSTM(25), go_backwards=True)(e) 

# Get the final states and splice 
f = sequence.last(h_f) 
b = sequence.first(h_b) 
e1 = splice(f, b) 

# Get the other embedding and concat 
i2 = Input(100) 
e2 = Embedding(100)(i2) 
e2 = sequence.first(word_embedding) 
e3 = splice(e1, e2) 

# Input concatenated embedding to new LSTM 
r = Recurrence(LSTM(50))(e3) 

私はこれを行うと、私は次のエラーを取得::!#dynamic軸を持つ 入力オペランド 'アウトプット(' Block1994_Output_0' 、[#]、[50])」= 2(私のコードは次のようになります1シーケンス軸と1バッチ軸)はサポートされていません。

私の最初の双方向LSTMの最終的な状態が得られない場合、正常に動作しますが、それは私が望むものではありません。

私も、この単純な例でエラーを再現することができます:出力シーケンスとLSTMの状態を返すについて

i = Input(features) 
e = Embedding(25)(i) 
h_f = Fold(LSTM(25), go_backwards=False)(e) 
s = Recurrence(LSTM(25))(h_f) 
+0

あなたの目標はシーケンスからシーケンスへのモデルを作成することですか?私はそれらが一般的に遅延入力として独自の出力を取るので尋ねます。これがあなたが望むものなら、UnfoldFrom()をチェックしてください。 –

+0

あなたの最初のe2 = ... be word_embedding = ...ですか? –

+0

私はseq2seqモデルを訓練しようとしていません。私はLSTMを使って文字からベクトル表現を学ぼうとしています。事前に訓練された単語の埋め込みと連結し、連結されたベクトルを別のLSTMに入力した後に密なレイヤーを入力します。そして、はい、あなたは最初のe2について正しいですが、それは問題の原因ではありません。 2番目の例からわかるように、私が理解しようとしているのは、別のLSTMへの入力として1つのLSTMの最終状態を持つことができない理由です。 – KyleW

答えて

0

チェックthis link。次に、出力を別のレイヤの入力にバインドすることができます。

関連する問題