上期我们一起学习了静态RNN和动态RNN的区别,
深度学习算法(第16期)----静态RNN和动态RNN
我们知道之前学过的CNN的输入输出都是固定长度,今天我们一起学习下RNN是怎么处理变化长度的输入输出的?
1. 处理变化长度的输入
到目前为止,我们已经知道在RNN中怎么使用固定长度的输入,准确的说是两个时刻长度的输入,但是如果输入的序列是变化长度的呢?比如一个句子。这种情况下,当我们调用dynamic_rnn()或者static_rnn()的时候,需要设置参数sequence_length。该参数应该是一个表示每个样本输入序列大小的一维tensor。走个例子看看:
seq_length = tf.placeholder(tf.int32, [None])
[...]
outputs, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32,
sequence_length=seq_length)
就上期的例子,假如说,第二个样本的输入长度为1的话,那么为了匹配输入tensor的大小,必须将第二个样本的第二个输入设为0,如下:
X_batch = np.arra