ありがとうございます。
あなたの唯一の機能は「高さ」なので、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=True
とstateful=True
(トレーニングの各エポックの冒頭にはreset_states()
を忘れないでください)で1つだけ使用できます。