前言:
此刻咱们对“矩阵转置计算公式”大约比较关怀,我们都想要分析一些“矩阵转置计算公式”的相关文章。那么小编在网摘上网罗了一些有关“矩阵转置计算公式””的相关文章,希望大家能喜欢,看官们快快来学习一下吧!在了解清楚softmax函数的功能以及数学表达式的前提下,使用python对softmax函数实现如下:
def softmax(x): if x.ndim == 2: x = x.T # np.max(x, axis=0) 获取每列的最大值 x = x - np.max(x, axis=0) # np.sum(np.exp(x), axis=0) 计算每一列的和 y = np.exp(x) / np.sum(np.exp(x), axis=0) return y.T x = x - np.max(x) # 溢出对策 return np.exp(x) / np.sum(np.exp(x))
当你读到这里的时候,如果你此时没弄清楚为什么要使用装置的方式来实现,本文后面的叙述可以解答你的困扰。
一般人实现softmax函数可能会写出如下代码:
def softmax(x): x = x - np.max(x) # 溢出处理 return np.exp(x) / np.sum(np.exp(x))
上面的代码只适合当x是一维的时候,当数据是二维或者其它的时候,更本不能实现。
然后你针对上面的问题,可能写出如下代码:
def s1(x): y = x - np.max(x, axis=1) return np.exp(y)/np.sum(np.exp(y), axis=1)
但这样的实现是错误的,更本不能正常运行。接下来解释原因:
if x.ndim == 2: x = x.T # np.max(x, axis=0) 获取每列的最大值 x = x - np.max(x, axis=0) # np.sum(np.exp(x), axis=0) 计算每一列的和 y = np.exp(x) / np.sum(np.exp(x), axis=0) return y.T # 为什么这里要这样实现? 使用转置的方式 # 假设不用转置的方式实现,输入数据为n行m列的矩阵 # 对每一行进行溢出处理,需要使用如下方法 # max = np.max(x, axis=1) # c = x - max,表示对x的每一行减去行最大值 # 此时 x 的形状为n行m列,max的形状为n个元素的一维 # 所以 x - max 不能进行运算 # 使用如上转置方式,同样分析 # x 为n行m列, 则y 为m行n列 # 此时再求 max = np.max(y, axis=0) 就要按照列求最大值 # 因为此时一列才是原来的一个样本数据 # 此时max 的形状为有n个元素的一维 # y - max 可以计算 # 最后结果转置即为原来的结果
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #矩阵转置计算公式