tf.nn.rnn_cell.MultiRNNCell的理解

  def __init__(self, cells, state_is_tuple=True):
    """Create a RNN cell composed sequentially of a number of RNNCells.

    Args:
      cells: list of RNNCells that will be composed in this order.
      state_is_tuple: If True, accepted and returned states are n-tuples, where
        `n = len(cells)`.  If False, the states are all concatenated along the
        column axis.  This latter behavior will soon be deprecated.

tf.nn.rnn_cell.MultiRNNCell()参数解释:
cells:将按此顺序组成的RNNCells的列表。 state_is_tuple :如果是True,接受和返回的状态是n个元组,其中 n = len(cell)。 如果是False,状态都是沿列轴串联的。

import tensorflow as tf
import numpy as np

num_units=[50,100,150]
cells=[tf.nn.rnn_cell.LSTMCell(num_unit) for num_unit in num_units]
mul_cells=tf.nn.rnn_cell.MultiRNNCell(cells)
print(mul_cells.state_size)

input_np=np.random.randn(32,100)
input_tf=tf.Variable(initial_value=input_np,shape=(32,100),dtype=tf.float32)

h_initial=mul_cells.zero_state(batch_size=32,dtype=tf.float32)
output,h_pro=mul_cells(input_tf,h_initial)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print('原始输入numpy类型数据:',input_np)
    print('经过多层RNN输出的结果:',sess.run(output,))
    print('h_pro:',sess.run(h_pro))
    print('ouput.shape:',output.shape)
    print('the type of h_pro',type(h_pro))
    i=0
    for data in h_pro:
        print('the shape of data %i in h_pro:' %i,sess.run(tf.shape(data)))
        print('the shape of data.c %i in h_pro:' % i, sess.run(tf.shape(data.c)))
        print('the shape of data.h %i in h_pro:' % i, sess.run(tf.shape(data.h)))
        i+=1

由于原始数据以及output和h_pr的数值比较大,因此并未输出。outout最后输出的是(32,150)的数据,也就是num_unit最后一个值。h_pro是一个元组,包含h和c,也就是第下图中用** 蓝 色 \blue{蓝色} **圈起来的部分。
h表示:最后一个时间步的输出
c表示:最后一个时间步 LSTM cell 的状态。
tf.nn.rnn_cell.MultiRNNCell的理解_第1张图片

tf.nn.rnn_cell.MultiRNNCell的理解_第2张图片

希望能帮到你

你可能感兴趣的:(rnn,tensorflow,深度学习)