---
title: 使用说明
description: "初始化SoftmaxLayerFWD。构造时需要传入输入矩阵、权重矩阵、输出矩阵的tensor信息，其中偏置矩阵可以不送，会调用第二个构造函数进行初始化。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_173.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_173.html
indexId: f5cb2eb7a2e953aaa7577d2d253c22def5e8c1007fa6acb607c1c497506b664c67
---
# 使用说明

#### 接口定义

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

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

| 参数名称 | 数据类型 | 描述 | 取值范围 |
| --- | --- | --- | --- |
| srcInfo | KuDNN::TensorInfo | src张量信息。 | {shape，type，layout} |
| dstInfo | KuDNN::TensorInfo | dst张量信息。 | {shape，type，layout} |
| axis | KuDNN::SizeType | 维度信息。 | 0<axis<srcInfo的维度，如srcInfo为三维，则0<axis<3 |
| algorithm | KuDNN::SoftmaxAlgorithmKind | 计算类型。 | KuDNN::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)->KuDNN::Status


**表3 ValidateInput函数输入参数**

| 参数名称 | 数据类型 | 描述 | 取值范围 |
| --- | --- | --- | --- |
| srcInfo | KuDNN::TensorInfo | src张量信息 | {shape，type，layout} |
| dstInfo | KuDNN::TensorInfo | dst张量信息 | {shape，type，layout} |
| axis | KuDNN::SizeType | 维度信息 | 0<axis<srcInfo的维度 如srcInfo为三维，0<axis<3 |
| algKind | KuDNN::SoftmaxAlgorithmKind | 计算类型 | KuDNN::SoftmaxAlgorithmKind::SOFTMAX |


#### 支持数据类型

- SoftMax支持fp32数据类型（TensorInfo对象初始化时需传入Shape、Type、Layout参数，此处列出为Type支持数据类型。）
**表4 TensorInfo对象初始化时支持的Type类型**

| srcInfo | dstInfo |
| --- | --- |
| KuDNN::Element::TypeT::F32(fp32) | KuDNN::Element::TypeT::F32(fp32) |


- 最高支持5Dtensor，支持顺序数据排布：a、ab、abc、abcd、abcde。
  对应KuDNN::Layout::A、KuDNN::Layout::AB、KuDNN::Layout::ABC、KuDNN::Layout::ABCD、KuDNN::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操作。

```
// 示例
using SizeType = KuDNN::SizeType;
using Shape = KuDNN::Shape;
using Type KuDNN::Element::TypeT
// Tensor初始化
const KuDNN::TensorInfo srcTensor= {{3, 2}, KuDNN::Element::TypeT::F32, KuDNN::Layout::AB};
const KuDNN::TensorInfo dstTensor= {{3, 2}, KuDNN::Element::TypeT::F32, KuDNN::Layout::AB};
SizeType axis = 1;KuDNN::SoftmaxAlgorithmKind algKind = KuDNN::SoftmaxAlgorithmKind::SOFTMAX
SizeType srcSize = srcATensor.GetTotalTensorSize();
SizeType dstSize = weiBTensor.GetTotalTensorSize();
// 申请存放入参和结果的内存空间
float * src = malloc(srcSize* sizeof(float));
float * dst = malloc(dstSize* sizeof(float));
// 构造算子
KuDNN::SoftmaxLayerFWD softMaxLayerFwd(srcTensor, dstTensor, axis, algKind);
// 执行算子运算
softMaxLayerFwd.Run(src, dst);
```
