OnehotOperation

功能

onehot编码。

算子功能实现

机器学习的预处理编码方式的一种:onehot编码。onehot编码对depth个状态进行编码,每个状态的对应位置置1,其它位置置0;输出结果为只有一位为1且长为depth的向量。

算子输出输入tensor x各个元素对应的独热编码,结果表现为在axis位置上增加维度depth。

计算过程示意(Python):

res = np.eye(depth)[input0]

示例1(Python):

x shape: torch.Size([2, 3])
x: tensor([[4, 4, 6],
           [6, 7, 6]])
depth: 10
axis: -1

# axis为-1表示output的最后一维output[i][j][:] 是x[i][j]对应的onehot编码
out_tensor shape: torch.Size([2, 3, 10])
out_tensor: tensor([[[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
                     [0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
                     [0, 0, 0, 0, 0, 0, 1, 0, 0, 0]],

                    [[0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
                     [0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
                     [0, 0, 0, 0, 0, 0, 1, 0, 0, 0]]], device='npu:0')

示例2(Python):

x shape: torch.Size([2, 3])
x: tensor([[2, 0, 4],
           [4, 3, 0]])
depth: 5
axis: 0

# output[:][i][j] 是x[i][j]对应的onehot编码,若axis为1则output[i][:][j] 是x[i][j]对应的onehot编码
out_tensor shape: torch.Size([5, 2, 3])
out_tensor: tensor([[[0, 1, 0],
                    [0, 0, 1]],

                   [[0, 0, 0],
                    [0, 0, 0]],

                   [[1, 0, 0],
                    [0, 0, 0]],

                   [[0, 0, 0],
                    [0, 1, 0]],

                   [[0, 0, 1],
                    [1, 0, 0]]], device='npu:0')

定义

struct OnehotParam {
    int64_t axis = 0;
    int64_t depth = 0;
};

参数列表

成员名称

类型

默认值

描述

axis

int64_t

0

depth所在下标。可为负数,为负数表示output的倒数第axis个维度是对应输入的独热编码。

depth

int64_t

0

每个输入对应的独热编码长度。

输入

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

int32/int64

ND

输入tensor,表示要获取哪些状态的独热编码。

one

[1]

int32/int64

与x相同

ND

标量1。类型/格式与x保持一致。传给算子用,没有实际意义。

zero

[1]

int32/int64

与x相同

ND

标量0。类型/格式与x保持一致。传给算子用,没有实际意义。

输出

参数

维度

数据类型

格式

描述

output

和x相比,在axis上多一个depth维度。

int32/int64

与x相同

ND

输出tensor。类型/格式与x保持一致,输出的独热编码。

规格约束