【发布时间】:2017-04-03 19:30:12
【问题描述】:
我对在 Tensorflow 中为 RNN 使用初始状态张量的正确方法是什么感到困惑。使用LSTMStateTuple 或cell.zero_state 的教程之间几乎有50/50 的比例。
这两个是一样的吗?如果有,为什么有两种方式?
在一个示例中,他们使用tf.nn.rnn_cell.LSTMStateTuple 来设置初始状态,而在另一个示例中,他们使用cell.zero_state()。
为什么有两种方法?什么时候更喜欢其中一个?设置state_is_tuple时只能使用LSTMStateTuple吗?如果是这样,cell.zero_state() 不再起作用了吗?
【问题讨论】:
-
两者是不同的东西。
state_is_tuple用于 LSTM 单元,因为 LSTM 单元的状态是一个元组。cell.zero_state是所有 RNN 单元状态的初始化器。 -
查看这个关于为什么 LSTM 状态是一个元组的解释:colah.github.io/posts/2015-08-Understanding-LSTMs
-
是的,但是如果您查看我提供的两个示例,它们使用两种不同的方法来设置初始状态。
-
第一个更明确。
cell.zero_state将根据 RNN 单元初始化正确的状态类(state_is_tuple 为真或假)。这行init_state = tf.nn.rnn_cell.LSTMStateTuple(cell_state, hidden_state)可以与cell.zero_state(batch_size)互换,其中单元格之前定义为cell = tf.nn.rnn_cell.BasicLSTMCell(state_size, state_is_tuple=True)
标签: machine-learning tensorflow deep-learning