私の理解では、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