RNN

class paddle.nn. RNN ( cell, is_reverse=False, time_major=False ) [源代码]

循环神经网络

该 OP 是循环神经网络(RNN)的封装,将输入的 Cell 封装为一个循环神经网络。它能够重复执行 cell.forward() 直到遍历完 input 中的所有 Tensor。

参数

  • cell (RNNCellBase) - RNNCellBase 类的一个实例。

  • is_reverse (bool,可选) - 指定遍历 input 的方向。默认为 False

  • time_major (bool,可选) - 指定 input 的第一个维度是否是 time steps。默认为 False。

输入

  • inputs (Tensor) - 输入(可以是多层嵌套的)。如果 time_major 为 False,则 Tensor 的形状为[batch_size,time_steps,input_size],如果 time_major 为 True,则 Tensor 的形状为[time_steps,batch_size,input_size],input_size 为 cell 的 input_size。

  • initial_states (Tensor|list|tuple,可选) - 输入 cell 的初始状态(可以是多层嵌套的),如果没有给出则会调用 cell.get_initial_states 生成初始状态。默认为 None。

  • sequence_length (Tensor,可选) - 指定输入序列的长度,形状为[batch_size],数据类型为 int64 或 int32。在输入序列中所有 time step 不小于 sequence_length 的元素都会被当作填充元素处理(状态不再更新)。

输出

  • outputs (Tensor|list|tuple) - 输出。如果 time_major 为 False,则 Tensor 的形状为[batch_size,time_steps,hidden_size],如果 time_major 为 True,则 Tensor 的形状为[time_steps,batch_size,hidden_size]。

  • final_states (Tensor|list|tuple) - cell 的最终状态,嵌套结构,形状和数据类型都与初始状态相同。

注解

该类是一个封装 rnn cell 的低级 api,用户在使用 forward 函数时须确保 initial_states 满足 cell 的要求。

代码示例

import paddle

inputs = paddle.rand((4, 23, 16))
prev_h = paddle.randn((4, 32))

cell = paddle.nn.SimpleRNNCell(16, 32)
rnn = paddle.nn.RNN(cell)
outputs, final_states = rnn(inputs, prev_h)

print(outputs.shape)
print(final_states.shape)

#[4,23,32]
#[4,32]