Вывод состояний ГРУ одинаков

Я пытаюсь построить сеть 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.

0 ответов

Другие вопросы по тегам