用 Python 计算 Softmax

同学们大家好!!在本教程中,我们将了解 Softmax 函数以及如何使用NumPy在 Python 中计算 Softmax 函数。我们还将了解具有 Softmax 内置方法的框架。那么让我们开始吧。

Softmax 函数是什么?

Softmax 是一个数学函数,它将数字向量作为输入,并将其标准化为概率分布,其中每个值的概率与向量中每个值的相对比例成正比

在对向量应用 softmax 函数之前,向量的元素可以在 的范围内(-∞, ∞)

有些元素可能是负面的,而有些元素可能是正面的。

应用softmax函数后,每个值将在 的范围内[0, 1],并且这些值的总和将为1,以便它们可以被解释为概率。

softmax计算公式为

我们首先找到向量中每个元素的指数,并将它们除以计算出的指数之和。

Softmax 函数最常用作多类分类问题的激活函数,在该问题中,您有一系列值,并且需要找到它们出现的概率。softmax 函数用于预测多项概率分布的神经网络模型的输出层。

在Python中实现Softmax函数

现在我们知道了在数字向量上计算 softmax 的公式,让我们来实现它。我们将使用 NumPyexp()方法来计算向量的指数,并使用 NumPysum()方法来计算分母和。

import numpy as np
 
def softmax(vec):
  exponential = np.exp(vec)
  probabilities = exponential / np.sum(exponential)
  return probabilities
 
vector = np.array([1.0, 3.0, 2.0])
probabilities = softmax(vector)
print("Probability Distribution is:")
print(probabilities)
Probability Distribution is:
[0.09003057 0.66524096 0.24472847]

使用框架计算softmax

许多框架提供了计算向量上的 softmax 的方法,以用于各种数学模型。

1.张量流

您可以使用它tensorflow.nn.softmax来计算向量上的 softmax,如图所示。

import tensorflow as tf
import numpy as np
 
vector = np.array([5.5, -13.2, 0.5])
 
probabilities = tf.nn.softmax(vector).numpy()
 
print("Probability Distribution is:")
print(probabilities)
Probability Distribution is:
[9.93307142e-01 7.51236614e-09 6.69285087e-03]

2.Scipy

Scipy库可用于计算 softmax,scipy.special.softmax如下所示。

import scipy
import numpy as np
 
vector = np.array([1.5, -3.5, 2.0])
probabilities = scipy.special.softmax(vector)
print("Probability Distribution is:")
print(probabilities)
Probability Distribution is:
[0.3765827  0.00253739 0.62087991]

3.PyTorch

您可以使用Pytorch torch.nn.Softmax(dim)计算 softmax,指定要计算的维度,如图所示。

import torch
 
vector = torch.tensor([1.5, -3.5, 2.0])
probabilities = torch.nn.Softmax(dim=-1)(vector)
print("Probability Distribution is:")
print(probabilities)
Probability Distribution is:
tensor([0.3766, 0.0025, 0.6209])

结论

恭喜!!,现在您已经了解了 softmax 函数以及如何使用各种方式实现它,您可以将它用于机器学习中的多类分类问题。

谢谢阅读!!