KerasでRNNの入力データを準備するのに問題があります。
現在、私のトレーニングデータのディメンションは次のとおりです。(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)
である必要がありますか?
最新の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))