LSTMStateTuple与Tensorflow中RNN的cell.zero_state()

use*_*545 11 machine-learning deep-learning tensorflow

我对在Tensorflow中使用RNN的初始状态张量的正确方法感到困惑.在使用LSTMStateTuplecell.zero_state的turtorial之间几乎有50/50的分割.

这两个是一样的吗?如果是这样,为什么有两种方法呢?

在一个示例中,它们用于tf.nn.rnn_cell.LSTMStateTuple设置初始状态,而在另一个示例中,它们使用cell.zero_state().

为什么有两种方法?何时更喜欢这一个?你可以只LSTMStateTuple在你设置时使用state_is_tuple吗?如果是这样,cell.zero_state()不再有用吗?

Mih*_*uja 9

这两者是不同的东西.state_is_tuple用于LSTM细胞,因为LSTM细胞的状态是元组.cell.zero_state是所有RNN小区的状态的初始化器.

您通常会更喜欢cell.zero_state函数,因为它将根据是否state_is_tuple为真来初始化所需的状态类.

请参阅 GitHub问题,您可以在其中看到cell.zero_state建议的 - "在单元对象上使用zero_state函数".

您可能想要的另一个原因cell.zero_state是因为它不知道单元格的类型(LSTM,GRU,RNN),您可以这样做:

if type == 'GRU':
   cell = BasicGRUCell
else:
   cell = BasicLSTMCell(state_is_tuple=True)

init_state = cell.zero_state(batch_size)
Run Code Online (Sandbox Code Playgroud)

初始状态设置好了.

LSTMStateTuple 将仅适用于具有状态作为元组的单元格.

何时使用LSTMStateTuple?

LSTMStateTuple当您使用自定义值(由培训师传递)初始化您的状态时,您将需要使用.cell.zero_state()将返回所有值等于0.0的状态.

如果您希望在批次之间保持状态,则必须在每批次之后获取它并将其添加到feed_dict下一批次.

对于为什么LSTM状态是一个元组的解释.

  • 在批次之间保持状态不是使用 LSTMStateTuple 的理由吗?我也可以用 cell.zero_state() 做到这一点......? (2认同)