昇腾社区首页
中文
注册

FillOperation

产品支持情况

硬件型号

是否支持

Atlas A3 推理系列产品/Atlas A3 训练系列产品

Atlas A2 训练系列产品/Atlas 800I A2 推理产品

Atlas 训练系列产品

Atlas 推理系列产品

Atlas 200I/500 A2 推理产品

功能说明

将指定位置设置为value值或者生成一个指定shape的tensor并填充为value。

图1 FillOperation
  • MaskedFill 功能(withMask 为 true):

    若 x 里的某元素,其所对应 mask 里同位置元素值为 true 或 1,则 output 该位置元素被设置为 value 值,output 其余位置元素值与 x 相同。支持广播功能。

    图2 Fill算子实现原理
    图3 Fill算子实现原理(广播场景)
  • Fill 功能(withMask 为 false):

    生成一个由 outDim 指定 shape 的 tensor,所有元素数值均为 value。

定义

1
2
3
4
5
6
struct FillParam {
    bool withMask = true;
    SVector<float> value;
    SVector<int64_t> outDim;
    uint8_t rsv[8] = {0};
}

参数列表

成员名称

类型

默认值

描述

withMask

bool

true

是否Masked Fill。

value

SVector<float>

[]

填充的元素,value是一个只含有一个元素的SVector。

outDim

SVector<float>

[]

withMask = false时,表示输出tensor的Shape。

rsv[8]

uint8_t

{0}

预留参数。

  • withMasktrue

    将由mask指定的位置的元素设置为value值。

    输入tensors数量为2,不需要指定outDim。

  • withMaskfalse

    生成一个由outDim指定Shape的tensor并将其每个元素填充为value。

    输入tensors数量为0,需指定outDim。

输入

参数

维度

数据类型

格式

描述

x

[dx_0, ..., dx_n]

float16/int32/bf16

ND

仅withMask为true时输入。

mask

[dmask_0, ..., dmask_m]

int8/bool

ND

仅withMask为true时输入,通过设置某些位置上的数值为 true 或 1,将x相同位置上的数据设置为value值。

输出

参数

维度

数据类型

格式

描述

output

  • withMask为true时,和x相同
  • withMask为false时,由outDim指定
  • withMask为true时,和x相同
  • withMask为false时,只能为float16

ND

输出tensor。

约束说明

  • Param参数约束

    a. value.size() == 1。

  • 输入输出约束
    • 输入x不可以被broadcast。
    • 输入mask的每个元素只能是0或者1。
    • withMask 为 true 时,mask shape 与 x 一致或可以 broadcast 为 x 的shape。

接口调用示例

  • 示例1:MaskedFill 非广播场景
    • 输入
      param.withMask = true
      param.value = [-1]
      x = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
      mask = [[ true, false,  true],
              [false,  true,  true],
              [ true,  true, false]]
    • 输出
      output = [[-1,  2, -1],
                [ 4, -1, -1],
                [-1, -1,  9]]
  • 示例2:MaskedFill 广播场景
    • 输入
      param.withMask = true
      param.value = [-1]
      x = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
      mask = [true, false, true]
    • 输出
      output = [[-1,  2, -1],
                [-1,  5, -1],
                [-1,  8, -1]]
  • 示例3:Fill 场景
    • 输入
      param.withMask = false
      param.value = [1]
      param.outDim = [2, 3]
    • 输出
      output = [[1, 1, 1],
                 [1, 1, 1]]