使用说明
接口定义
初始化SoftmaxLayerFWD。构造时需要传入输入矩阵、权重矩阵、输出矩阵的tensor信息,其中偏置矩阵可以不送,会调用第二个构造函数进行初始化。
参数名称 |
数据类型 |
描述 |
取值范围 |
|---|---|---|---|
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
参数名称 |
数据类型 |
描述 |
取值范围 |
|---|---|---|---|
src |
void * |
src矩阵数据指针。 |
指向输入的内存地址 |
dst |
void * |
dst矩阵数据指针。 |
指向输出的内存地址 |
ValidateInput负责验证Softmax输入参数。在算子构造过程中自动触发执行。
ValidateInput(const TensorInfo &srcInfo, const TensorInfo &dstInfo, SizeType axis, SoftmaxAlgorithmKind algorithm)->KDNN::Status
参数名称 |
数据类型 |
描述 |
取值范围 |
|---|---|---|---|
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)
使用示例
二维数据类型为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); |