使用 tf.nn.dynamic_rnn 但最终状态没有 c 和 h

use tf.nn.dynamic_rnn but final state don't have c and h

我正在使用 tensorflow,我想要 运行 一个带有 RNN 的程序,但我得到了以下错误:

a=self._encoder_final_state[0].c
AttributeError: 'Tensor' object has no attribute 'c'

程序是这样的:

self._encoder_cells = build_rnn_layers(
    cell_type=self._hparams.cell_type,
    num_units_per_layer=self._num_units_per_layer,
    use_dropout=self._hparams.use_dropout,
    dropout_probability=self._hparams.dropout_probability,
    mode=self._mode,
    residual_connections=self._hparams.residual_encoder,
    highway_connections=self._hparams.highway_encoder,
    dtype=self._hparams.dtype,
)

self._encoder_outputs, self._encoder_final_state = tf.nn.dynamic_rnn(
    cell=self._encoder_cells,
    inputs=encoder_inputs,
    sequence_length=self._inputs_len,
    parallel_iterations=self._hparams.batch_size[0 if self._mode == 'train' else 1],
    swap_memory=False,
    dtype=self._hparams.dtype,
    scope=scope,
)
a=self._encoder_final_state[0].c

来自dynamic_rnndocs

If cells are LSTMCells state will be a tuple containing a LSTMStateTuple for each cell.

here 你可以看到 LSTMStateTuple 确实具有所需的 ch 属性。

不幸的是,您的代码没有给我任何线索,告诉我您使用的是哪种细胞,但显然,它们不是 LSTMCells。所以我不能给你比切换到 LSTMCells.

更好的建议