3

ボールの軌道が落ちることを予測したい。その軌道は放物線である。私は、LSTMがこれには多すぎるかもしれないことを知っています(つまり、単純な方法で十分です)。 私は2つのLSTMレイヤーと最後に密なレイヤーでこれを行うことができると思いました。ケラスLSTM入力 - 放物線の軌跡を予測する

私が望む最終結果は、モデル3の高さh0、h1、h2を与え、h3を予測させることです。次に、h1、h2、h4を予測するために前に出力したh3などを与えたいと思います。そのあと、軌道全体を予測することができます。

最初に、最初のLSTMレイヤの入力シェイプはどのようになりますか? input_shape =(3,1)ですか? 第二に、LSTMはパラボリックパスを予測できますか?

私は放物線ではなく、ほぼフラットな線を得ています。入力を入力して入力する方法を誤解している可能性を排除したいと考えています。

は、入力形状が形(samples, timeSteps, features)であるあなたに

答えて

0

ありがとうございます。

あなたの唯一の機能は「高さ」なので、features = 1です。
異なる長さのシーケンスを入力するので、timeSteps = Noneを使用できます。

したがって、input_shape(None, 1)となります。
下記のstateful=True層を使用するので、batch_input_shape=(1,None,1)を使用できます。あなたが望む "サンプル"の量を選択してください。

あなたのモデルは実際に軌道を予測できますが、2つ以上の層が必要になることがあります。 (LSTM内でのマッチの仕組みを知っているレイヤーやセルの数に関する正確な答え)

トレーニング:

さて、まずあなたは(だけにして、良いことを予測し始めることができるようになります)ネットワークを訓練する必要があります。

トレーニングの場合、正しいシーケンスで真値が[h1,h2,h3,h4,h5,h6...]のシーケンスがあるとします。 (私はあなたが実際に多くのシーケンス(サンプル)を持っていることをお勧めします、あなたのモデルはより良く学ぶ)。このシーケンスの

は、次の手順を予測出力は、その後、あなたのターゲットはそう [h2,h3,h4,h5,h6,h7...]

になりたい、あなたは形状(manySequences, steps, 1)data配列があると、あなたが作る:今すぐ

x_train = data[:,:-1,:]  
y_train = data[:,1:,:] 

あなたのレイヤーはreturn_sequences=Trueです。 (すべての入力ステップが出力ステップを生成します)。そして、このデータを使ってモデルを訓練します。

stateful=Trueまたはstateful=Falseのいずれを使用している場合でも、この点はあまり関係ありません。

予測する(trueの場合、あなたは常に一つ一つのエポックとシーケンスの前model.reset_state()必要がある。しかし):予測するための

を、あなたはモデルでstateful=Trueを使用することができます。つまり、h1を入力すると、h2が生成されます。 h2を入力すると、正しい "h3"を予測する "現在の速度"(モデルのstate)が記憶されます。

(トレーニング段階では、シーケンス全体を一度に入力するので、これは重要ではありませんので、長いシーケンスのステップ間で速度がわかります)。

reset_states()set_current_speed_to(0)とすることができます。あなたが入力しようとしているステップがシーケンスの最初のステップであるときはいつでもそれを使用します。

model.reset_states() #make speed = 0 
nextH = someValueWithShape((1,1,1)) 

predictions = [nextH] 

for i in range(steps): 
    nextH = model.predict(nextH)  
    predictions.append(nextH) 

ありan example hereがあるが、二つの機能を使用して:

次に、あなたは、このようなループを行うことができます。私は2つのモデルを使用していますが、1つはトレーニング用、1つは予測用ですが、return_sequences=Truestateful=True(トレーニングの各エポックの冒頭にはreset_states()を忘れないでください)で1つだけ使用できます。

関連する問題