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