【知识---深度学习中的Softmax说明及使用】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • Softmax
  • 代码
  • 总结


前言

深度学习中常用到一个Softmax函数,它究竟是个什么东西了,我们来学习一下!!!


Softmax

Softmax 是一种用于将一组数值转换为概率分布的函数,常用于多类别分类问题中。

Softmax 将输入数组的元素转换为概率,使得它们的和等于 1。

这通常用于神经网络的输出层,以获得每个类别的概率。

【知识---深度学习中的Softmax说明及使用】_第1张图片
Softmax 函数的关键点是它将输入的实数转换为范围在 0 到 1 之间的值,并且这些值的总和等于 1。

这使得它们可以解释为概率分布,其中每个元素表示对应类别的概率。

在实际应用中,由于计算指数可能导致数值不稳定性,通常会使用一些优化技巧,例如减去输入向量中的最大值,以提高数值的稳定性。

代码

void softmax_mul(float* x, float* y, int rows, int cols, int chan)
{
    for(int i = 0, wh = rows * cols; i < rows; i++)
    {
        for(int j = 0; j < cols; j++)
        {
            float sum = 0.0;   // 用于存储 exp 后的和,用于归一化
            float expect = 0.0; // 用于计算期望值

            // 计算 exp,并累加求和
            for(int k = 0; k < chan - 1; k++)
            {
                x[k * wh + i * cols + j] = exp(x[k * wh + i * cols + j]);
                sum += x[k * wh + i * cols + j];
            }

            // 归一化
            for(int k = 0; k < chan - 1; k++)
            {
                x[k * wh + i * cols + j] /= sum;
            }
// 这里可以不用管
            // 计算期望值
            for(int k = 0; k < chan - 1; k++)
            {
                x[k * wh + i * cols + j] = x[k * wh + i * cols + j] * (k + 1);
                expect += x[k * wh + i * cols + j];
            }

            // 将期望值存储在输出数组中
            y[i * cols + j] = expect;
        }
    }
}


总结

以上,就是softmax的一个简单介绍,如有不足,请大家斧正!!!!

你可能感兴趣的:(深度学习,人工智能,c++,ubuntu,linux,笔记)