我的理解是,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