对如何 运行 tensorflow LSTM 感到困惑
Confused on how to run tensorflow LSTM
我见过在 tensorflow 上调用 lstm 的两种不同方式,我对一种方法与另一种方法的区别感到困惑。以及在什么情况下使用其中一种
第一个是创建一个 lstm,然后像下面的代码一样立即调用它
lstm = rnn_cell.BasicLSTMCell(lstm_size)
# Initial state of the LSTM memory.
initial_state = tf.zeros([batch_size, lstm.state_size])
for i in range(num_steps):
# The value of state is updated after processing each batch of words.
output, state = lstm(words[:, i], state)
第二个是通过 rnn.rnn() 调用 lstm 单元,如下所示。
# Define a lstm cell with tensorflow
lstm = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)
# Split data because rnn cell needs a list of inputs for the RNN inner loop
inputToLstmSplited = tf.split(0, n_steps, inputToLstm) # n_steps * (batch_size, n_hidden)
inputToLstmSplitedFiltered = tf.matmul(inputToLstmSplited, weights['hidden']) + biases['hidden']
# Get lstm cell out
outputs, states = rnn.rnn(lstm, inputToLstmSplited, initial_state=istate)
第二个实际上与第一个循环中的循环相同,返回循环中收集的所有输出的列表和最终状态。不过,它通过一些安全检查可以更有效地做到这一点。它还支持有用的功能,如可变序列长度。第一个选项出现在 Tensorflow 教程中,让您了解 RNN 是如何解开的,但第二个选项更适合 "production" 代码。
我见过在 tensorflow 上调用 lstm 的两种不同方式,我对一种方法与另一种方法的区别感到困惑。以及在什么情况下使用其中一种
第一个是创建一个 lstm,然后像下面的代码一样立即调用它
lstm = rnn_cell.BasicLSTMCell(lstm_size)
# Initial state of the LSTM memory.
initial_state = tf.zeros([batch_size, lstm.state_size])
for i in range(num_steps):
# The value of state is updated after processing each batch of words.
output, state = lstm(words[:, i], state)
第二个是通过 rnn.rnn() 调用 lstm 单元,如下所示。
# Define a lstm cell with tensorflow
lstm = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)
# Split data because rnn cell needs a list of inputs for the RNN inner loop
inputToLstmSplited = tf.split(0, n_steps, inputToLstm) # n_steps * (batch_size, n_hidden)
inputToLstmSplitedFiltered = tf.matmul(inputToLstmSplited, weights['hidden']) + biases['hidden']
# Get lstm cell out
outputs, states = rnn.rnn(lstm, inputToLstmSplited, initial_state=istate)
第二个实际上与第一个循环中的循环相同,返回循环中收集的所有输出的列表和最终状态。不过,它通过一些安全检查可以更有效地做到这一点。它还支持有用的功能,如可变序列长度。第一个选项出现在 Tensorflow 教程中,让您了解 RNN 是如何解开的,但第二个选项更适合 "production" 代码。