如何对Numpy矩阵每行独立执行Softmax计算?
解决Softmax按行独立计算的问题
修改后的Softmax实现如下:
def softmax(x): # 计算每行的最大值,keepdims保持维度以便广播 e_x = np.exp(x - np.max(x, axis=1, keepdims=True)) # 按行求和,同样保持维度匹配 return e_x / e_x.sum(axis=1, keepdims=True)
关键修改说明:
- 原代码中
np.max(x)会计算整个矩阵的全局最大值,我们需要每行的最大值来做数值稳定,因此添加axis=1指定按行取最大值,keepdims=True让结果保持(6,1)的形状,和输入x的(6,4)维度兼容,避免广播错误。 - 原代码中
e_x.sum()会对整个矩阵的所有元素求和,改为e_x.sum(axis=1, keepdims=True)后,会对每行的元素单独求和,得到的结果是(6,1)的列向量,这样和e_x做除法时,会自动将每行的和广播到该行的所有元素,实现每行独立计算Softmax。
调用softmax(w0)后,结果中每行的元素和都为1,完全符合单个样本Softmax概率的要求。
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

