シーケンシャルデータがあり、Kerasでy
をx
で予測するLSTMモデルを宣言しました。したがって、model.predict(x1)
とmodel.predict(x2)
を呼び出す場合、2つのpredict()
の間で_model.reset_states
_を明示的に呼び出すのは正しいですか? _model.reset_states
_は、重みではなく入力の履歴をクリアしますか?
_# data1
x1 = [2,4,2,1,4]
y1 = [1,2,3,2,1]
# dat2
x2 = [5,3,2,4,5]
y2 = [5,3,2,3,2]
_
実際のコードでは、model.evaluate()
を使用しています。 evaluate()
で、_reset_states
_はデータサンプルごとに暗黙的に呼び出されますか?
_model.evaluate(dataX, dataY)
_
reset_states
は、ネットワークの非表示の状態のみをクリアします。ネットワークでオプションstateful=True
が設定されているかどうかによって、この関数の動作が異なる場合があることに注意してください。設定されていない場合、すべての状態は、ネットワークでのバッチ計算のたびに自動的にリセットされます(たとえば、fit
、predict
、およびevaluate
も呼び出した後)。そうでない場合は、連続するモデル呼び出しを独立させたい場合は、毎回reset_states
を呼び出す必要があります。
次のいずれかを明示的に使用する場合:
_model.reset_states()
_
モデル内のすべてのレイヤーの状態をリセットする、または
_layer.reset_states()
_
特定のステートフルRNNレイヤー(LSTMレイヤーも)の状態をリセットするには、実装されています ここ :
_def reset_states(self, states=None):
if not self.stateful:
raise AttributeError('Layer must be stateful.')
_
LSTMでは、次のことを行う必要があります。
モデルの最初のレイヤーに_batch_size
_引数を渡すか、_batch_input_shape
_引数を渡すことにより、使用しているバッチサイズを明示的に指定します
_stateful=True
_を設定します。
fit()
を呼び出すときに_shuffle=False
_を指定します。
ステートフルモデルを使用する利点は、おそらく最もよく説明されています ここ 。