FillOperation
产品支持情况
硬件型号  | 
是否支持  | 
|---|---|
√  | 
|
√  | 
|
√  | 
|
√  | 
|
√  | 
功能
将指定位置设置为value值或者生成一个指定shape的tensor并填充为value。

功能实现
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。
 
定义
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}  | 
预留参数。  | 
- withMask为true
将由mask指定的位置的元素设置为value值。
输入tensors数量为2,不需要指定outDim。
 
- withMask为false
生成一个由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  | 
  | 
  | 
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]] 
 - 输入