使用数学库的 Softmax 激活函数

Softmax activation function using math library

我正尝试在 python 中为我的反向传播和梯度下降程序开发一个 softmax 函数。在我得到输出层的输出(2 个输出)后,我调用了 softmax 函数,输出是一个类似向量的 [0.844521, 0.147048],我当前实现的 softmax 函数是这样的:

import math

vector = [0.844521, 0.147048]
def soft_max(x):
    e = math.exp(x)
    return e / e.sum()
print(soft_max(vector))

然而,当我 运行 它时,我得到以下错误

TypeError: must be real number, not list

注意: 我只想使用数学库而不使用其他

函数math.exp只能作用于标量,不能作用于整个数组。如果你只想使用 math 而不是你需要按元素实现它:

import math

def soft_max(x):
    exponents = []
    for element in x:
        exponents.append(math.exp(element))
    summ = sum(exponents)
    for i in range(len(exponents)):
        exponents[i] = exponents[i] / summ 
    return exponents 

if __name__=="__main__":
    arr = [0.844521, 0.147048]
    output = soft_max(arr)
    print(output)

不过我还是要强调,使用numpy会更容易解决问题:

import numpy as np

def soft_max(x):
    e = np.exp(x)
    return e / np.sum(e)

if __name__=="__main__":
    arr = [0.844521, 0.147048]
    output = soft_max(arr)
    print(output)