如何理解lambda实现的Softmax函数中numpy的数组运算逻辑?
刚好我之前也琢磨过这个点,其实本质是numpy的向量化运算和广播特性在搞事情,咱们把这个softmax函数拆开来一步步看:
首先先把示例代码贴出来方便对照:
>>> import numpy as np >>> z = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0] >>> softmax = lambda x : np.exp(x)/np.sum(np.exp(x)) >>> softmax(z) array([0.02364054, 0.06426166, 0.1746813 , 0.474833 , 0.02364054 , 0.06426166, 0.1746813 ])
具体运算逻辑拆解
- 当你把数组
z传入lambda的参数x时,x指代的是整个输入数组,不是单个元素 np.exp(x)会执行向量化运算:它会遍历数组里的每一个元素,单独计算该元素的指数值,最后返回一个和原数组形状完全一致的新数组——简单说就是把x[i]转换成np.exp(x[i]),每个元素都走一遍这个操作np.sum(np.exp(x))会把刚才生成的指数数组里的所有元素全部求和,得到一个单一的标量数值- 最后一步的除法
np.exp(x)/np.sum(np.exp(x))是numpy的广播机制在起作用:numpy会自动把这个单一的求和标量“扩展”成和指数数组相同的形状,然后让指数数组里的每一个元素都除以这个总和,最终得到每个元素对应的softmax概率值
内容的提问来源于stack exchange,提问作者RussAbbott
相关产品推荐
相关产品推荐

