tf.nn.dynamic_rnn返回两个张量:
outputs和
states。
的
outputs保存所有细胞在批处理的所有序列的输出。因此,如果特定序列更短并用零填充,
outputs则最后一个像元的将为零。
在
states保持最后的细胞状态,或者等价每个序列的最后一个非零输出(如果您正在使用
BasicRNNCell)。
这是一个例子:
import numpy as npimport tensorflow as tfn_steps = 2n_inputs = 3n_neurons = 5X = tf.placeholder(dtype=tf.float32, shape=[None, n_steps, n_inputs])seq_length = tf.placeholder(tf.int32, [None])basic_cell = tf.nn.rnn_cell.BasicRNNCell(num_units=n_neurons)outputs, states = tf.nn.dynamic_rnn(basic_cell, X, sequence_length=seq_length, dtype=tf.float32)X_batch = np.array([ # t = 0 t = 1 [[0, 1, 2], [9, 8, 7]], # instance 0 [[3, 4, 5], [0, 0, 0]], # instance 1])seq_length_batch = np.array([2, 1])with tf.Session() as sess: sess.run(tf.global_variables_initializer()) outputs_val, states_val = sess.run([outputs, states], feed_dict={X: X_batch, seq_length: seq_length_batch}) print('outputs:') print(outputs_val) print('nstates:') print(states_val)
打印类似:
outputs:[[[-0.85381496 -0.19517037 0.36011398 -0.18617202 0.39162001] [-0.99998015 -0.99461144 -0.82241321 0.93778896 0.90737367]] [[-0.99849552 -0.88643843 0.20635395 0.157896 0.76042926] [ 0. 0. 0. 0. 0. ]]] # because len=1states:[[-0.99998015 -0.99461144 -0.82241321 0.93778896 0.90737367] [-0.99849552 -0.88643843 0.20635395 0.157896 0.76042926]]
请注意,
states保持与中的向量相同
output,它们是每个批处理实例的最后一个非零输出。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)