# 适用批输入的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))
标签:转置,max,矩阵,X2,批处理,softmax,exp,np,axis From: https://www.cnblogs.com/kmeira/p/17798338.html