鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

使用说明

接口定义

初始化SoftmaxLayerFWD。构造时需要传入输入矩阵、权重矩阵、输出矩阵的tensor信息,其中偏置矩阵可以不送,会调用第二个构造函数进行初始化。

SoftmaxLayerFWD(const TensorInfo &srcInfo, const TensorInfo &dstInfo, SizeType axis, SoftmaxAlgorithmKind algorithm)->void
表1 SoftmaxLayerFWD函数输入参数

参数名称

数据类型

描述

取值范围

srcInfo

KDNN::TensorInfo

src张量信息。

{shape,type,layout}

dstInfo

KDNN::TensorInfo

dst张量信息。

{shape,type,layout}

axis

KDNN::SizeType

维度信息。

0<axis<srcInfo的维度,如srcInfo为三维,则0<axis<3

algKind

KDNN::SoftmaxAlgorithmKind

计算类型。

KDNN::SoftmaxAlgorithmKind::SOFTMAX

执行算子运算,要传入存放输入的内存地址和输出的内存地址。

Run(const void *src, void *dst)->void

表2 Run函数输入参数

参数名称

数据类型

描述

取值范围

src

void *

src矩阵数据指针。

指向输入的内存地址

dst

void *

dst矩阵数据指针。

指向输出的内存地址

ValidateInput负责验证Softmax输入参数。在算子构造过程中自动触发执行。

ValidateInput(const TensorInfo &srcInfo, const TensorInfo &dstInfo, SizeType axis, SoftmaxAlgorithmKind algorithm)->KDNN::Status

表3 ValidateInput函数输入参数

参数名称

数据类型

描述

取值范围

srcInfo

KDNN::TensorInfo

src张量信息

{shape,type,layout}

dstInfo

KDNN::TensorInfo

dst张量信息

{shape,type,layout}

axis

KDNN::SizeType

维度信息

0<axis<srcInfo的维度

如srcInfo为三维,0<axis<3

algKind

KDNN::SoftmaxAlgorithmKind

计算类型

KDNN::SoftmaxAlgorithmKind::SOFTMAX

支持数据类型

  • SoftMax支持fp32数据类型(TensorInfo对象初始化时需传入Shape、Type、Layout参数,此处列出为Type支持数据类型。)
    表4 TensorInfo对象初始化时支持的Type类型

    srcInfo

    dstInfo

    KDNN::Element::TypeT::F32(fp32)

    KDNN::Element::TypeT::F32(fp32)

  • 最高支持5Dtensor,支持顺序数据排布:a、ab、abc、abcd、abcde。

    对应KDNN::Layout::A、KDNN::Layout::AB、KDNN::Layout::ABC、KDNN::Layout::ABCD、KDNN::Layout::ABCDE。

    表5 TensorInfo对象初始化时支持的Layout类型

    dimension

    srcInfo

    dstInfo

    1D

    a

    a

    2D

    ab

    ab

    3D

    abc

    abc

    4D

    abcd

    abcd

    5D

    abcde

    abcde

使用示例

二维数据类型为F32的SoftMax操作。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// 示例
using SizeType = KDNN::SizeType;
using Shape = KDNN::Shape;
using Type KDNN::Element::TypeT
// Tensor初始化
const KDNN::TensorInfo srcTensor= {{3, 2}, KDNN::Element::TypeT::F32, KDNN::Layout::AB};
const KDNN::TensorInfo dstTensor= {{3, 2}, KDNN::Element::TypeT::F32, KDNN::Layout::AB};
SizeType axis = 1;
KDNN::SoftmaxAlgorithmKind algKind = KDNN::SoftmaxAlgorithmKind::SOFTMAX
SizeType srcSize = srcATensor.GetTotalTensorSize();
SizeType dstSize = weiBTensor.GetTotalTensorSize();
// 申请存放入参和结果的的内存空间
float * src = malloc(srcSize* sizeof(float));
float * dst = malloc(dstSize* sizeof(float));
// 构造算子
KDNN::SoftmaxLayerFWD softMaxLayerFwd(srcTensor, dstTensor, axis, algKind);
// 执行算子运算
softMaxLayerFwd.Run(src, dst);