21

Keras で RNN の入力データを準備するのに問題があります。

現在、私のトレーニング データの次元は次のとおりです。(6752, 600, 13)

  • 6752: 学習データ数
  • 600: 時間ステップ数
  • 13: 特徴ベクトルのサイズ (ベクトルは float です)

X_train両方ともY_trainこの次元にあります。

SimpleRNNこのデータをKerasにフィードする準備をしたいと思います。ステップ #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)?

4

2 に答える 2

21

最新の 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))
于 2016-05-03T16:38:00.287 に答える