RNNのTensorflowで初期状態テンソルを使用する正しい方法が何なのか混乱しています。 LSTMStateTuple または cell.zero_state を使用するチュートリアル間でほぼ50/50の分割があります。
2つは同じですか?もしそうなら、なぜ2つの方法があるのですか?
1つの例では_tf.nn.rnn_cell.LSTMStateTuple
_を使用して初期状態を設定し、もう1つの例ではcell.zero_state()
を使用します。
なぜ2つの方法があるのですか?どちらを好むのですか? _state_is_Tuple
_を設定するときにのみLSTMStateTuple
を使用できますか?その場合、cell.zero_state()
は機能しなくなりますか?
2つは異なるものです。 LSTMセルの状態はタプルであるため、_state_is_Tuple
_はLSTMセルで使用されます。 _cell.zero_state
_は、すべてのRNNセルの状態の初期化子です。
_cell.zero_state
_がtrueかどうかに応じて必要な状態クラスを初期化するため、通常は_state_is_Tuple
_関数を優先します。
_cell.zero_state
_が推奨されている this GitHubの問題-「セルオブジェクトでzero_state関数を使用する」を参照してください。
_cell.zero_state
_が必要になるもう1つの理由は、セルのタイプ(LSTM、GRU、RNN)に依存せず、次のようなことができるためです。
_if type == 'GRU':
cell = BasicGRUCell
else:
cell = BasicLSTMCell(state_is_Tuple=True)
init_state = cell.zero_state(batch_size)
_
初期状態はOKです。
LSTMStateTuple
は、タプルとしての状態を持つセルでのみ機能します。
LSTMStateTupleを使用する場合
(トレーナーから渡された)カスタム値を使用して状態を初期化する場合は、LSTMStateTuple
を使用する必要があります。 cell.zero_state()
は、すべての値が0.0に等しい状態を返します。
バッチ間で状態を保持したい場合は、各バッチの後で取得して、次のバッチの_feed_dict
_に追加する必要があります。
LSTM状態がタプルである理由の説明については this を参照してください。