У меня есть трехмерный тензор формы [batch, None, dim]
, где второе измерение, то есть временные метки, неизвестно. Я использую dynamic_rnn
обрабатывать такой ввод, как в следующем фрагменте:Получить последний выход dynamic_rnn в TensorFlow
import numpy as np
import tensorflow as tf
batch = 2
dim = 3
hidden = 4
lengths = tf.placeholder(dtype=tf.int32, shape=[batch])
inputs = tf.placeholder(dtype=tf.float32, shape=[batch, None, dim])
cell = tf.nn.rnn_cell.GRUCell(hidden)
cell_state = cell.zero_state(batch, tf.float32)
output, _ = tf.nn.dynamic_rnn(cell, inputs, lengths, initial_state=cell_state)
На самом деле, работает это пропущено с некоторыми фактическими цифрами, у меня есть некоторые разумные результаты:
inputs_ = np.asarray([[[0, 0, 0], [1, 1, 1], [2, 2, 2], [3, 3, 3]],
[[6, 6, 6], [7, 7, 7], [8, 8, 8], [9, 9, 9]]],
dtype=np.int32)
lengths_ = np.asarray([3, 1], dtype=np.int32)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
output_ = sess.run(output, {inputs: inputs_, lengths: lengths_})
print(output_)
И выход:
[[[ 0. 0. 0. 0. ]
[ 0.02188676 -0.01294564 0.05340237 -0.47148666]
[ 0.0343586 -0.02243731 0.0870839 -0.89869428]
[ 0. 0. 0. 0. ]]
[[ 0.00284752 -0.00315077 0.00108094 -0.99883419]
[ 0. 0. 0. 0. ]
[ 0. 0. 0. 0. ]
[ 0. 0. 0. 0. ]]]
есть ли способ, чтобы получить тензор 3-D в форме [batch, 1, hidden]
с последнего соответствующего выхода динамического RNN? Благодаря!
Мне нравится ваш стиль кода! Это отличный вопрос для изучения того, как работает nn. спасибо –
Принимаемый ответ не является предпочтительным способом сделать это. Посмотрите на ответ @ ShaoTang в конце. – Rahul
@Rahul спасибо, что указал. Во всяком случае, похоже, что ShaoTang указывает на состояния, в то время как вопрос конкретно касается результатов. Или я чего-то не хватает? – petrux