昇腾社区首页
中文
注册

FillOperation

功能

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

图1 FillOperation

功能实现

Fill 算子的功能是将指定位置设置为 value 值或者生成一个指定 Shape 的 Tensor 并填充为 value。

  • MaskedFill 功能(withMask 为 true):

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

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

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

定义

struct FillParam {
    bool withMask = true;
    SVector<float> value;
    SVector<int64_t> outDim;
}

参数列表

成员名称

类型

默认值

描述

withMask

bool

true

是否Masked Fill。

value

SVector<float>

[]

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

outDim

SVector<float>

[]

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

  • withMasktrue

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

    inTensors 数量为 2,不需要指定 outDim。

  • withMaskfalse

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

    inTensors 数量为 0,需指定 outDim。

输入

参数

维度

数据类型

格式

描述

x

[dx_0, ..., dx_n]

float16/int32

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]]