Keras : RNN の入力データはどのように準備すればよいですか? 質問する

Keras : RNN の入力データはどのように準備すればよいですか? 質問する

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

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

  • 6752: トレーニングデータの数
  • 600: 時間ステップ数
  • 13: 特徴ベクトルのサイズ(ベクトルは浮動小数点数です)

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)?

ベストアンサー1

最新の 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))

おすすめ記事