我的理解是,tf.nn.dynamic_rnn
返回在每个时间步的RNN单元(例如LSTM)的输出以及最终状态。我如何在所有时间步骤中访问单元状态,而不仅仅是最后一步?例如,我希望能够平均所有隐藏状态,然后在后续图层中使用它。Tensorflow,如何访问一个RNN的所有中间状态,而不仅仅是最后一个状态
以下是我如何定义LSTM单元,然后使用tf.nn.dynamic_rnn
展开它。但是这只给出了LSTM的最后一个单元状态。
import tensorflow as tf
import numpy as np
# [batch-size, sequence-length, dimensions]
X = np.random.randn(2, 10, 8)
X[1,6:] = 0
X_lengths = [10, 6]
cell = tf.contrib.rnn.LSTMCell(num_units=64, state_is_tuple=True)
outputs, last_state = tf.nn.dynamic_rnn(
cell=cell,
dtype=tf.float64,
sequence_length=X_lengths,
inputs=X)
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
out, last = sess.run([outputs, last_state], feed_dict=None)
没有理由需要访问不属于输出结果的内部状态。如果这是您的使用案例,我会考虑定义一个与LSTM相同的RNN,但输出其完整状态。 – jasekp
看看这个QA:https://stackoverflow.com/q/39716241/4282745 – npf
或这个https://github.com/tensorflow/tensorflow/issues/5731#issuecomment-262151359 – npf