2016-05-02 8 views
9

KerasでRNNの入力データを準備するのに問題があります。ケラス:RNNの入力データをどのように準備すればよいですか?

現在、私のトレーニングデータの次元がある:(6752, 600, 13)

  • 6752:学習データの数
  • 600:時間の数は、手順
  • 13:特徴ベクトルの大きさ(ベクトルがfloatです)

X_trainおよびY_trainは両方ともこの次元にある。

このデータをKerasのSimpleRNNに入力する準備をします。 ステップ#0からステップ#599までのタイムステップを進んでいるとします。 input_length = 5を使用したいとしましょう。つまり、最近5つの入力を使用したいとします。 (例えば、ステップ#10、#11、#12、#13、#14、#14)。

X_trainはどうすればよいですか?

(6752, 5, 600, 13)または(6752, 600, 5, 13)である必要がありますか?

Y_trainはどのような形状にする必要がありますか?

(6752, 600, 13)または(6752, 1, 600, 13)または(6752, 600, 1, 13)である必要がありますか?

答えて

12

最新の5つの入力を使用して出力を予測したい場合は、トレーニングサンプルの600ステップすべてを提供する必要はありません。私の提案は、次のようにトレーニングデータを渡すために、次のようになります。

   t=0 t=1 t=2 t=3 t=4 t=5 ... t=598 t=599 
sample0  |---------------------| 
sample0   |---------------------| 
sample0    |----------------- 
... 
sample0           ----| 
sample0           ----------| 
sample1  |---------------------| 
sample1   |---------------------| 
sample1    |----------------- 
.... 
.... 
sample6751          ----| 
sample6751          ----------| 

トレーニング・シーケンスの総数は各トレーニング・シーケンス

(600 - 4) * 6752 = 4024192 # (nb_timesteps - discarded_tailing_timesteps) * nb_samples 

まで合計する5時間ステップで構成されています。各シーケンスの各時間ステップで、特徴ベクトルの13の要素すべてを渡します。その後、訓練データの形状は(4024192,5,13)となる。

このループは、データを再構築することができます

input = np.random.rand(6752,600,13) 
nb_timesteps = 5 

flag = 0 

for sample in range(input.shape[0]): 
    tmp = np.array([input[sample,i:i+nb_timesteps,:] for i in range(input.shape[1] - nb_timesteps + 1)]) 

    if flag==0: 
     new_input = tmp 
     flag = 1 

    else: 
     new_input = np.concatenate((new_input,tmp)) 
+1

はあなたにたくさん助けそんなに@Lorritを、ありがとうございました!今は私のモデルが走っています! – totuta

関連する問題