首页 / 资讯中心 / 文章详情

手动实现 Softmax 函数

手动实现 Softmax 函数 ★ FEATURED ARTICLE
#coding:utf8importtorchimportnumpy softmax的计算 defsoftmax(x):res[]foriinx:res.append(numpy.exp(i))res[r/sum(res)forrinres]returnres x[1,2,3,4]#torch实现的softmaxprint(torch.softmax(torch.Tensor(x),0))#自己实现的softmaxprint(softmax(x))这段代码的主要目的是对比“手动实现的 Softmax 函数”与PyTorch 框架内置的 Softmax 函数”在计算结果上是否一致。它通过一个简单的例子演示了 Softmax 的核心数学原理将一组任意实数转换为概率分布所有值在 0 到 1 之间且总和为 1。具体代码逻辑拆解如下1. 核心功能Softmax 计算代码定义了一个名为softmax的函数并手动实现了其数学逻辑输入一个数值列表x例如[1, 2, 3, 4]。步骤一指数化对列表中的每个元素iii计算eie^iei即numpy.exp(i)。这一步放大了数值之间的差异确保较大的数对应的指数值远大于较小的数。步骤二归一化将所有指数化后的结果求和然后用每个指数值除以总和。公式P(xi)exi∑exjP(x_i) \frac{e^{x_i}}{\sum e^{x_j}}P(xi​)∑exj​exi​​输出返回一个概率分布列表所有值的和严格等于 1。2. 代码执行流程定义数据设置输入向量x [1, 2, 3, 4]。调用 PyTorch 实现torch.softmax(torch.Tensor(x), 0)利用 PyTorch 内置的高效算子计算。dim0表示沿着第 0 个维度即列表本身进行计算。调用自定义实现softmax(x)运行上面定义的纯 Python/NumPy 逻辑。打印结果代码会连续打印两行结果。预期现象这两行输出的数值在数学上是完全相等的浮点数精度范围内可能微小差异但逻辑一致。3. 为什么要这样做在机器学习和深度学习中Softmax 常用于多分类问题的输出层。作用它将神经网络输出的原始分数Logits可以是任意正负数转化为概率。意义比如模型输出[1, 2, 3, 4]代表四个类别的得分经过 Softmax 后变成[0.032, 0.087, 0.236, 0.645]我们可以直观地看出模型认为第 4 个类别的可能性最大64.5%。总结这段代码是一个验证性脚本用于确认手动编写的 Softmax 算法逻辑是否正确以及理解 PyTorch 是如何处理这一常见数学运算的。它展示了从“原始分数”到“概率分布”的转换过程。
阅读完成 · 觉得有帮助?
咨询建站