适用批处理的softmax函数的输入矩阵为什么要转置

发布时间 2023-10-30 17:17:54作者: Kmeira
# 适用批输入的softmax函数
def Softmax(x):
    if x.ndim == 2:
        x = x.T
        x = x - np.max(x, axis=0)
        y = np.exp(x) / np.sum(np.exp(x), axis=0)
        return y.T
    # 为什么要转置 原因是Numpy数组的扩张原理是把行向量复制扩张成矩阵 例子如下
    # X2 = np.array([[1, 2, 3], [3, 2, 1], [1, 2, 4]])
    # np.max(X2, axis=1) 作用是取得各行的的最大值
    # 返回的是一个行向量,在和二维矩阵做加减运算的的扩充操作是将每行都变成这个行向量
    # 所以X2 - np.max(X2, axis=1) 不是计算X2的各行减去各行的最大值
    # np.max(X2, axis=1) 返回的是 [3, 3, 4]
    # 在计算时扩张成:
    # [3, 3, 4]
    # [3, 3, 4]
    # [3, 3, 4]
    # 而要达到计算目的的矩阵是
    # [3, 3, 3]
    # [3, 3, 3]
    # [4, 4, 4]
    x = x - np.max(x) # 溢出对策
    return np.exp(x) / np.sum(np.exp(x))