2016-06-29 15 views
4

TensorFlowを使用して、時系列データの予測を行っています。したがって、私は50個のタグを持っているようで、次の5個のタグを探したいと思います。TensorFlowで多対多のLSTMを実装するには?

次の図に示すように、私は4番目の構造のようにしたいと思います。 RNNs

私はチュートリアルのデモを経て:リカレントニューラルネットワークに

をしかし、私はそれが異なっている上の写真、第5回1と同様に提供することができました。

どのモデルを使用できますか?私はseq2seqモデルを考えていますが、それが正しいかどうかはわかりません。

答えて

5

seq2seqモデルを使用することができます。簡潔にするために、Tensorflowバックエンドを持つKerasでどのように実行できるかの例を書いてきました。私は例を実行していないので、調整が必要な場合があります。あなたのタグがホットな場合は、代わりにクロスエントロピー損失を使用する必要があります。

from keras.models import Model 
from keras.layers import Input, LSTM, RepeatVector 

# The input shape is your sequence length and your token embedding size 
inputs = Input(shape=(seq_len, embedding_size)) 

# Build a RNN encoder 
encoder = LSTM(128, return_sequences=False)(inputs) 

# Repeat the encoding for every input to the decoder 
encoding_repeat = RepeatVector(5)(encoder) 

# Pass your (5, 128) encoding to the decoder 
decoder = LSTM(128, return_sequences=True)(encoding_repeat) 

# Output each timestep into a fully connected layer 
sequence_prediction = TimeDistributed(Dense(1, activation='linear'))(decoder) 

model = Model(inputs, sequence_prediction) 
model.compile('adam', 'mse') # Or categorical_crossentropy 
model.fit(X_train, y_train) 
+0

ありがとう、サイモン! 私はseq2seqのデモを実行しませんでした。私を混乱させる1つの点は埋め込みについてです。エンコーダとデコーダでは、埋め込みレイヤは必要ありません。入力(idsのリスト)を渡すだけです。 –

+0

あなたのIDを埋め込むか、ワンホットエンコードしたいと思うかもしれません。それはあなたのidsの性質に依存しますが、非常に大量のidsがなければ、ワンホットエンコーディングが正しい選択だと思います。あなたのデータは、 '(num_samples、seq_len、one_hot_size)のサイズでなければなりません。そしてクロスエントロピー損失を使うべきです。 –

+0

異なるサイズの入力と出力はできますか? –

関連する問題