web-dev-qa-db-ja.com

Kerasでmodel.reset_states()を使用する方法は?

シーケンシャルデータがあり、Kerasでyxで予測する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)
_
7
jef

reset_statesは、ネットワークの非表示の状態のみをクリアします。ネットワークでオプションstateful=Trueが設定されているかどうかによって、この関数の動作が異なる場合があることに注意してください。設定されていない場合、すべての状態は、ネットワークでのバッチ計算のたびに自動的にリセットされます(たとえば、fitpredict、およびevaluateも呼び出した後)。そうでない場合は、連続するモデル呼び出しを独立させたい場合は、毎回reset_statesを呼び出す必要があります。

14
Marcin Możejko

次のいずれかを明示的に使用する場合:

_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_を指定します。


ステートフルモデルを使用する利点は、おそらく最もよく説明されています ここ

1
prosti