Python NumPy 中的 Softmax
Muhammad Waiz Khan
2023年1月30日
本教程将解释如何使用 Python 中的 NumPy 库实现 softmax 函数。softmax 函数是对数函数的一种广义多维形式,它被用于多项式对数回归和人工神经网络中的激活函数。它被用于多项式逻辑回归和人工神经网络中的激活函数。
softmax 函数将数组中的所有元素在区间 (0,1)
内进行归一化处理,使其可以作为概率处理。softmax 函数由以下公式定义。
我们将看一下在 Python 中使用 NumPy 库对一维和二维数组实现 softmax 函数的方法。
在 Python 中实现一维数组的 NumPy Softmax 函数
假设我们需要定义一个 softmax 函数,将一个 1D 数组作为输入,并返回所需的归一化数组。
在应用 softmax 的时候,常见的问题是数值稳定性问题,也就是说,由于可能出现的指数和溢出误差,∑j e^(z_j)
可能会变得非常大。这个溢出误差可以通过用数组的每个值减去其最大值来解决。
下面的代码示例演示了 softmax 函数的原始实现和使用 Python 中的 NumPy 库进行最大减法的实现。
- 原始 softmax:
import numpy as np
def softmax(x):
f_x = np.exp(x) / np.sum(np.exp(x))
return f_x
- 数值稳定的 softmax:
import numpy as np
def softmax(x):
y = np.exp(x - np.max(x))
f_x = y / np.sum(np.exp(x))
return f_x
在 Python 中对二维数组的 NumPy softmax 函数
二维数组的 softmax 函数会沿行进行 softmax 变换,也就是沿行计算最大和。在 1D 数组的情况下,我们不必担心这些事情,我们只需要在完整的数组上应用所有的操作。
下面的代码示例演示了如何使用 Python 中的 NumPy 库对一个 2D 数组输入进行 softmax 变换。
import numpy as np
def softmax(x):
max = np.max(
x, axis=1, keepdims=True
) # returns max of each row and keeps same dims
e_x = np.exp(x - max) # subtracts each row with its max value
sum = np.sum(
e_x, axis=1, keepdims=True
) # returns sum of each row and keeps same dims
f_x = e_x / sum
return f_x
假设我们需要沿着二维数组的列进行 softmax 变换,我们只需将输入和输出的 softmax()
方法进行传输即可。
示例代码:
softmax(x.T).T