pythonmax函数原理_Softmax函数原理及Python实现
Softmax原理
Softmax函数用于将分类结果归一化,形成一个概率分布。作用类似于二分类中的Sigmoid函数。
对于一个k维向量z,我们想把这个结果转换为一个k个类别的概率分布p(z)。softmax可以用于实现上述结果,具体计算公式为:
\[softmax(x_i) = \frac{exp(x_i)}{\sum_j exp(x_j)}
\]
对于k维向量z来说,其中\(z_i \in R\),我们使用指数函数变换可以将元素的取值范围变换到\((0, +\infin)\),之后我们再所有元素求和将结果缩放到[0,1],形成概率分布。
常见的其他归一化方法,如max-min、z-score方法并不能保证各个元素为正,且和为1。
Softmax性质
输入向量x加上一个常数c后求softmax结算结果不变,即:
\[softmax(x) = softmax(x+c)
\]
我们使用softmax(x)的第i个元素的计算来进行证明:
\[softmax(x_i+c) = \frac{exp(x_i+c)}{\sum_jexp(x_j+c)} \\= \frac{exp(x_i) * exp(c)}{\sum_j[exp(x_j) * exp(c)]} \\=\frac{exp(x_i) * exp(c)}{exp(c) * sum_j exp(x_j)} \\=\frac{exp(x_i)}{\sum_jexp(x_j)} \\= softmax(x_i)
\]
函数实现
由于指数函数的放大作用过于明显,如果直接使用softmax计算公式\(softmax(x_i) = \frac{exp(x_i)}{\sum_j exp(x_j)}\)进行函数实现,容易导致数据溢出(上溢)。所以我们在函数实现时利用其性质:先对输入数据进行处理,之后再利用计算公式计算。具体使得实现步骤为:
查找每个向量x的最大值c;
每个向量减去其最大值c, 得到向量y = x-c;
利用公式进行计算,softmax(x) = softmax(x-c) = softmax(y)
代码如下:
import numpy as np
def softmax(x):
"""
softmax函数实现
参数:
x --- 一个二维矩阵, m * n,其中m表示向量个数,n表示向量维度
返回:
softmax计算结果
"""
assert(len(X.shape) == 2)
row_max = np.max(X, axis=axis).reshape(-1, 1)
X -= row_max
X_exp = np.exp(X)
s = X_exp / np.sum(X_exp, axis=axis, keepdims=True)
return s
测试一下:
a = [[1,2,3],[-1,-2,-3]]
b = [[1,2,3]]
c = [1,2,3]
a = np.array(a)
b = np.array(b)
c = np.array(c)
print(softmax(a))
print(softmax(b))
print(softmax(c)) # error
输出结果为:
[[ 0.09003057 0.24472847 0.66524096]
[ 0.66524096 0.24472847 0.09003057]]
[[ 0.09003057 0.24472847 0.66524096]]
Traceback (most recent call last):
assert(len(X.shape) == 2)
AssertionError
pythonmax函数原理_Softmax函数原理及Python实现相关推荐
- 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )
文章目录 一.进程注入原理 二.远程调用流程 ( 获取 so 动态库地址 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 ) 一.进程注入原理 调试进程 At ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )
文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...
- 从零入门 Serverless | 一文搞懂函数计算及其工作原理
作者 | 孔德慧(夏莞) 阿里云函数计算开发工程师 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门" ...
- 【tensorflow】全连接层函数tf.layers.dense()原理
TensorFlow全连接层函数tf.layers.dense()原理 - jian shu https://www.jianshu.com/p/3855908b4c29 最近在用TensorFlow ...
- JS函数简单的底层原理 -变量重复声明无效,隐式申明,变量提升,函数提升,以及堆栈内存的变化
JS函数简单的底层原理 (个人理解): 1. 已经使用var申明且赋值,若再次申明,则第二次申明(不赋值)无效. 2.在同一个作用域下,只要是发生了同名,且变量完成赋值,后者会覆盖前者.存在两个相同的 ...
- SAP UI5和Angular的函数防抖(Debounce)和函数节流(Throttle)实现原理介绍
这是Jerry 2021年的第 11 篇文章,也是汪子熙公众号总共第 282 篇原创文章. Jerry之前的文章 SAP UI5 OData谣言粉碎机:极短时间内发送两个Odata request, ...
- SAP CRM One Order函数CRM_Object_FILL_OW的设计原理
标题:SAP CRM One Order函数CRM_FILL_OW的设计原理 There are totally 60 function modules in One order with namin ...
- 从零入门Serverless|一文搞懂函数计算及其工作原理
云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 什么是函数计算? 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器 ...
最新文章
- MySQL的IFNULL函数
- 标准访问控制列表配置(51cto: 实验 34)
- linux串口上网的简单实现,Linux串口上网的简单实现(3)
- pyquery获取不到网页完整源代码_PyQuery 详解
- Flutter入门:如何只关闭自身页面
- 山东大学有人陪!真的吗?_10,000小时! 您真的需要那么多吗?
- vlookup两个条件匹配_用VLOOKUP进行同时满足两个条件的查找,几种方法都在这啦!||Excel技巧...
- 500万相机芯片尺寸_MGS二代系列500万像素新品面世
- Spring的事务管理
- mysql vc调用时内存错误
- wincc嵌入式excel报表 该报表系统能够读取WINCC中历史归档数据,产生出EXCEL报表文件,同时在画面中EXCEL控件实时显示
- 深度学习-22:信息论和信息熵
- 《相关性准则——大数据时代的高效能之道》一一1.6 相关性准则
- 照片上传分辨率低怎么改?图片分辨率dpi怎么调?
- Excel表格数据导入
- 斯嘉丽约翰逊60张pdf什么时间的?_什么叫美丽与演技并存?
- [CPNet]-理想亲和图的生成以及作用——Blank
- linux系统添加根证书 linux证书信任列表
- 『broadview2006』博文视点在SD2.0大会上以书会友
- 重视苹果和谷歌的警告信