2017-03-03 13 views
2

私は現在KerasでLSTMに取り組んでおり、TimeDistributed層に関する質問があります。Kerasの `TimeDistributed`レイヤーでシーケンスを出力しないようにするには?

私はTimeDistributedのレイヤーを入力とし、(batch_size,timesteps,num_features1)のようなレイヤーがあるとしましょう。それは(batch_size,timesteps,num_features2)のようなものを出力します。

代わりに(batch_size,num_features2)のようなものを出力したいと思います。出来ますか ?

それは(TimeDistributed層を使用して)緻密層にreturn_sequence = TrueとLSTM層を積層した後、バック(batch_size,nb_features)のような入力を受け付ける「古典的」緻密層に行くことであろう。

ありがとうございます!

ブノワ

+0

これは、時間ディメンションをスカッシュすることを意味します。これはどのようにしたいですか?最も一般的な方法は 'グローバルプール'です。時間をかけたり、最後の出力を取ります。 –

+0

'(batch_size、timesteps、num_features)'を返すのではなく、 '(batch_size、timesteps)'のようなものを返すことができます。私は 'グローバルプーリング'でlokk、ありがとう。 – BenDes

+0

あなたの質問のタイトルに関しては、TimeDistributedを適用して時間ディメンションを保存するようにしているので、とにかくタイムシーケンスを返します。 TimeDistributedで影響を与えることができるのは、タイムステップごとのフィーチャの数だけです。アウトプットにディメンション1のレイヤーを適用して平坦化することで、1つのフィーチャーに縮小できます。しかし、(None、timesteps、features)から(None、feat_1、feat-2)に変更することはできません。私はあなたの質問を得ることをまだ確信していません –

答えて

0

私は正確にあなたがそう、私はここで私はあなたが欲しいものだと思うのネットワークを置く欲しいものを理解することはよく分かりません。そうでない場合は、必要なネットワークのドラフトと各ステップの図形で質問を編集してください。 このネットワークで達成したいことを知ることも簡単になります。

model = sequential() 
# shape = (None,timesteps, num_feat1) 
model.add(TimeDistributed(Dense(num_feat2)) 
# shape = (None,timesteps, num_feat2) 
model.add(LSTM(1, return_sequence=True)) 
# shape = (None, timesteps, 1) 
model.add(Flatten()) 
# shape = (None, timesteps) 
model.add(Dense(num_outputs_desired)) 
# shape = (None, outputs) 

これは何ですか?これは、(1)最初のフィーチャを各タイムステップで均等に変換し、稠密なレイヤ時間を分散させ、(2)シーケンスを1stmで処理し、各ステップで1つの値を戻し、(3) (私はそれがどのようにすべきかわからない、あなたのモデルの目的は何ですか?)

+0

はい、これは私が欲しかったものです! Nassimに感謝します。私は 'model.add(Flatten())'を知らなかった – BenDes

+0

ようこそ:それは助けてうれしい –

関連する問題