Вывод состояний ГРУ одинаков
Я пытаюсь построить сеть LSTM на tenorflow. и я смущен выходом tf.nn.dynamic_rnn()
. почему следующий код выводит одинаковые состояния в каждом примере?
tf.reset_default_graph()
def length(sequence):
used = tf.sign(tf.reduce_max(tf.abs(sequence), 2))
length = tf.reduce_sum(used, 1)
length = tf.cast(length, tf.int32)
return length
X = tf.placeholder(shape=[None, 713, 8] , dtype=tf.float32)
with tf.variable_scope("GRU"):
gru_cell = tf.nn.rnn_cell.GRUCell(128)
output, hidden_state = tf.nn.dynamic_rnn(gru_cell, inputs=X,
sequence_length=length(X), dtype=tf.float32)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
output, hidden_state = sess.run([output, hidden_state],feed_dict={X:test_X})
print(hidden_state)
и это вывод
[[ 0. 0. 0. ..., 1. 1. 0.]
[ 0. 0. 0. ..., 1. 1. 0.]
[ 0. 0. 0. ..., 1. 1. 0.]
...,
[ 0. 0. 0. ..., 1. 1. 0.]
[ 0. 0. 0. ..., 1. 1. 0.]
[ 0. 0. 0. ..., 1. 1. 0.]]
Мой вход test_X имеет форму [192, 713, 8]. Все они представляют собой разные последовательности с максимальной длиной 713. Потому что последовательности не имеют одинаковую длину. Я дополнил его нулями. и функция length()
используется для определения реальной длины последовательности в test_X.