2017-10-07 8 views
0

私はKerasを初めて使いました.LSTM層の入力データの形状を理解するのが難しいと感じています.Ceras Documentationによれば、入力データは3Dテンソル(nb_samples、timesteps、input_dim)。 この形式を理解するのに問題があります。 timesteps変数は、ネットワークが記憶しているタイムステップの数を表しますか?KerasでLSTMの入力を設定する方法

私のデータでは、ネットワークの出力にいくつかの時間ステップが影響しますが、前の10サンプルが出力に影響するとは言えません。 たとえば、入力は文章を構成する単語です。各文の単語間には重要な相関関係がある。私は、文章の長さを事前に知らないので、この長さも文ごとに異なります。文章の終わりを知る(つまり、終わりを示すピリオドがある)。 2つの異なる文が互いに影響しないので、前の文を覚える必要はありません。

私は強化学習のポリシーを学習するためにLSTMネットワークを使用しているため、固定データセットはありません。エージェントのポリシーによって、文章の長さが変更されます。

データをどのように整形する必要がありますか? Keras LSTM層にどのように供給されるべきですか?

+0

あなたが費やすことをいとわないどのように多くのリソースに応じて、あなたがして、文の最大長を選ぶ必要があります切り捨て/その長さのすべての例を0で埋めてください。 Kerasは固定する必要があります。 –

+0

この場合、入力形状はどうでしょうか? input_shape =(最大刻印長、)? –

+0

テキストを文章に分割する必要があります。文章の量はあなたの 'nb_samples'です。 'timesteps'は単語/文字の最大量です。次に、 'input_dim'はそれらの単語/文字の表現のサイズです(例えば、単語埋め込みを使用する場合、埋め込みサイズ) –

答えて

1

タイムステップは、シーケンスの合計長です。

単語を使って作業している場合、それは各文の単語の量です。
文字で作業している場合は、各シーケンスの文字数です。変数の文の長さの場合

、あなたはNoneにその次元を設定する必要があります。

#for functional API models: 
inputTensor = Input((None,input_dim)) #the nb_samples doesn't participate in this definition 

#for sequential models: 
LSTM(units, input_shape=(None,input_dim)) #the nb_samples doesn't participate in this definition 

keras内の変数lenghtsでの作業の2つの方法があります。パディング

  • 可変長の

    • 固定長固定長の場合、同じ長さのバッチで

    を分離、あなたは無意味であるダミーワード/キャラクターを作成し、にあなたの文章を埋めます最大の長さなので、すべての文章の長さは同じです。次に、ダミー語/ charを無視するMasking()層を追加します。

    レイヤーにはすでにmask_zerosというパラメータがあります。埋め込みを処理する場合、id 0をダミーのchar/wordにすることができます。

    可変長で、あなたはちょうどここのように、小さいバッチで、あなたの入力データを分離:Keras misinterprets training data shape

  • 関連する問題