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

时间:2019-02-21 13:22:09

标签: tensorflow recurrent-neural-network tensor

我正在使用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

1 个答案:

答案 0 :(得分:1)

来自dynamic_rnn的{​​{3}}:

  

如果单元格为LSTMCells state将是一个包含   LSTMStateTuple每个单元格。

然后docs可以看到LSTMStateTuple确实是具有所需ch属性的对象。

不幸的是,您的代码没有给我任何线索,您正在使用哪种类型的单元格,但是显然,它们不是LSTMCells。因此,除了切换到LSTMCells之外,我给您提供更好的建议。