softmax算子layer的图形化原理与代码实现

softmax,看名字就知道,就是如果判断输入属于某个雷的概率大于属于其它类的概率,那么这个类对应的值就逼近于1,其它类的值就逼近于0,该算法的主要应用就是多分类,而且是互斥的,即只能属于其中一个类,和sigmoid类的激活函数不同的是,一般的激活函数只能分两类,所以可以理解成softmax是sigmoid类的激活函数的扩展。它的算法如下:

softmax算子layer的图形化原理与代码实现

也就是把所有的值用e的指数函数表示出来,求和后算每个值占的比率,保证总和为1,一般就可以认为softmax得出的就是概率.

抽象层面的原理如下所示:

softmax算子layer的图形化原理与代码实现

在网络层面,它可以表示为:

softmax算子layer的图形化原理与代码实现

c语言实现: 

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <stdint.h>

void softmax(const float *input, const uint32_t dim_vec, float *output)
{
    float sum = 0.0f;         

    for(int i = 0; i < dim_vec; i++)
    {                         
        output[i] = expf(input[i]);
        sum = sum + output[i];
    }                         

    for(int i = 0; i < dim_vec; i++)
    {                         
        output[i] = output[i] / sum;
    }                         
}

int main(void)
{
	float input[10] = {1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1};
    float output[10]={0};

	softmax(input, 10, output);

	int i;
	for(i = 0; i < 10; i ++)
	{
		printf("%f ", output[i]);
	}

	printf("\n");

	return 0;
}

编译:

gcc softmax.c -lm -o softmax

softmax算子layer的图形化原理与代码实现

测试:

softmax算子layer的图形化原理与代码实现

可以看到,最后输出的概率和值是成正相关的。

图形化表示:

softmax算子layer的图形化原理与代码实现

 结束!

上一篇:论文笔记--Coupled Layer-wise Graph Convolution for Transportation Demand Prediction


下一篇:layer.open 弹出层中打开的表单页面如何禁用部分输入框