# LogSoftmax — MindSpore Signal+ 使用手册 alpha 文档

# LogSoftmax

对输入数组沿指定维度进行 Log-Softmax 计算，输出每个元素的对数概率值。

\[\text{output}_{i} = \log\frac{\exp(\text{input}_{i})}{\sum_j \exp(\text{input}_j)} \quad \text{for elements along the given axis}\]

输入：

  - input_ptr - 输入数据地址。

  - axis - 归一化的轴。

  - n_dim - 输入张量维度。

  - inner_size - 内部尺寸（轴之后的元素个数）。

  - outter_size - 外部尺寸（轴之前的元素个数）。

  - axis_size - 归一化轴的元素数量。

  - core_mask - 核掩码（仅适用于共享存储版本）。

  - sum_data - 中间累加存储地址（用于存放指数和）。

输出：

  - output_ptr - Log-Softmax 计算结果地址。

支持平台：

  `FT78NE` `MT7004`

备注

- FT78NE 支持fp, int8

- MT7004 支持hp, fp

共享存储版本:

void fp_logsoftmax_s(float *input_ptr, float *output_ptr, float *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size, int core_mask)

void hp_logsoftmax_s(half *input_ptr, half *output_ptr, half *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size, int core_mask)

void i8_logsoftmax_s(int8_t *input_ptr, int8_t *output_ptr, float *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size, int core_mask)

C调用示例：

     1//FT78NE示例
     2#include <stdio.h>
     3#include <logsoftmax.h>
     4
     5int main() {
     6    float *input = (float *)0xA0000000;   // input在DDR空间
     7    float *output = (float *)0xC0000000;
     8    float *sum_data = (float *)0xD0000000;
     9    int axis = 1;
    10    int n_dim = 3;
    11    int inner_size = 4;
    12    int outter_size = 2;
    13    int axis_size = 3;
    14    int core_mask = 0xff;
    15
    16    fp_logsoftmax_s(input, output, sum_data, axis, n_dim, inner_size, outter_size, axis_size, core_mask);
    17    return 0;
    18}

私有存储版本:

void fp_logsoftmax_p(float *input_ptr, float *output_ptr, float *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size)

void hp_logsoftmax_p(half *input_ptr, half *output_ptr, half *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size)

void i8_logsoftmax_p(int8_t *input_ptr, int8_t *output_ptr, float *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size)

C调用示例：

     1//FT78NE示例
     2#include <stdio.h>
     3#include <logsoftmax.h>
     4
     5int main() {
     6    float *input = (float *)0x10810000;   // input在L2空间
     7    float *output = (float *)0x10820000;
     8    float *sum_data = (float *)0x10830000;
     9    int axis = 1;
    10    int n_dim = 3;
    11    int inner_size = 4;
    12    int outter_size = 2;
    13    int axis_size = 3;
    14
    15    fp_logsoftmax_p(input, output, sum_data, axis, n_dim, inner_size, outter_size, axis_size);
    16    return 0;
    17}