row_conv

paddle.static.nn. row_conv ( input, future_context_size, param_attr=None, act=None ) [源代码]

行卷积(Row-convolution operator)或称之为超前卷积(lookahead convolution),最早介绍于 DeepSpeech2 论文中,双向的 RNN 在深度语音模型中很有用,它通过对整个序列执行正向和反向传递来学习序列的表示。

然而,与单向 RNNs 不同的是,在线部署和低延迟设置中,双向 RNNs 具有难度。超前卷积将来自未来子序列的信息以一种高效的方式进行计算,以改进单向递归神经网络。row convolution operator 与一维序列卷积不同,计算方法如下:

给定输入序列长度为 \(t\) 的输入序列 \(X\) 和输入维度 \(D\),以及一个大小为 \(context * D\) 的滤波器 \(W\),输出序列卷积为:

\[out_i = \sum_{j=i}^{i+context-1} X_{j} · W_{j-i}\]
公式中:
  • \(out_i\):第 i 行输出变量形为[1, D]。

  • \(context\):下文(future context)大小

  • \(X_j\):第 j 行输出变量,形为[1,D]

  • \(W_{j-i}\):第(j-i)行参数,其形状为[1,D]。

详细请参考 设计文档

论文链接:Deep Speech 2: End-to-End Speech Recognition in English and Mandarin

参数

  • input (Tensor) - 支持输入为 LodTensor 和 Tensor,输入类型可以是[float32, float64],它支持可变时间长度的输入序列。当输入 input 为 LodTensor 时,其内部 Tensor 是一个具有形状(T x N)的矩阵,其中 T 是这个 mini batch 中的总的 timestep,N 是输入数据维数。当输入 input 为 Tensor 时,其形状为(B x T x N)的三维矩阵,B 为 mini batch 大小,T 为每个 batch 输入中的最大 timestep,N 是输入数据维数。

  • future_context_size (int) - 下文大小。请注意,卷积核的 shape 是[future_context_size + 1, N],N 和输入 input 的数据维度 N 保持一致。

  • param_attr (ParamAttr,可选) - 参数的属性,包括名称、初始化器等,默认为 None。

  • act (str,可选) - 非线性激活函数,默认为 None。

返回

表示 row_conv 计算结果的 Tensor,数据类型、维度和输入 input 相同。

代码示例

>>> # for LodTensor inputs
>>> import paddle
>>> paddle.enable_static()
>>> x = paddle.static.data(name='x', shape=[9, 16],
...                     dtype='float32', lod_level=1)
>>> out_x = paddle.static.nn.row_conv(input=x, future_context_size=2)

>>> # for Tensor inputs
>>> y = paddle.static.data(name='y', shape=[9, 4, 16], dtype='float32')
>>> out_y = paddle.static.nn.row_conv(input=y, future_context_size=2)