add_position_encoding

  • paddle.fluid.layers.add_position_encoding(input, alpha, beta, name=None)[源代码]

该OP将输入inpu中每个位置(序列中的位置)的特征与对应的位置编码加权求和,位置编码可参考论文: Attention Is All You Need

输出的计算公式如下:

add_position_encoding - 图1

  • 其中:
    • PE(pos, 2i): pos位置对应的编码中偶数特征位上的值
    • PE(pos, 2i + 1): pos位置对应的编码中奇数特征位上的值
  • 参数:
    • input (Variable) – Tensor或LoD level为1的LoDTensor。Tensor时,其形状为 add_position_encoding - 图2 ,其中 add_position_encoding - 图3 表示batch size, add_position_encoding - 图4 表示序列长度, add_position_encoding - 图5 为特征维度大小;LoDTensor时,其形状为 add_position_encoding - 图6 ,其中 add_position_encoding - 图7 表示所有序列长度之和, add_position_encoding - 图8 为特征维度大小。数据类型为float32或float64。
    • alpha (float) – 加权求和时输入input的权重系数
    • beta (float) – 加权求和时位置编码的权重系数
    • name (str,可选) – 具体用法请参见 Name ,一般无需设置,默认值为None。

返回: 加上位置编码后的Tensor或LoDTensor,和输入(input)具有相同数据类型和形状及LoD信息。

返回类型: Variable

代码示例:

  1. import paddle.fluid as fluid
  2.  
  3. tensor = fluid.layers.data(
  4. name='tensor',
  5. shape=[32, 64, 512],
  6. dtype='float32',
  7. append_batch_size=False)
  8. position_tensor = fluid.layers.add_position_encoding(
  9. input=tensor, alpha=1.0, beta=1.0)