Softmax函数原理及Python实现过程解析
作者:April15 发布时间:2022-12-15 02:18:24
Softmax原理
Softmax函数用于将分类结果归一化,形成一个概率分布。作用类似于二分类中的Sigmoid函数。
对于一个k维向量z,我们想把这个结果转换为一个k个类别的概率分布p(z)。softmax可以用于实现上述结果,具体计算公式为:
对于k维向量z来说,其中zi∈R,我们使用指数函数变换可以将元素的取值范围变换到(0,+∞),之后我们再所有元素求和将结果缩放到[0,1],形成概率分布。
常见的其他归一化方法,如max-min、z-score方法并不能保证各个元素为正,且和为1。
Softmax性质
输入向量x加上一个常数c后求softmax结算结果不变,即:
我们使用softmax(x)的第i个元素的计算来进行证明:
函数实现
由于指数函数的放大作用过于明显,如果直接使用softmax计算公式
进行函数实现,容易导致数据溢出(上溢)。所以我们在函数实现时利用其性质:先对输入数据进行处理,之后再利用计算公式计算。具体使得实现步骤为:
查找每个向量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
来源:https://www.cnblogs.com/ysugyl/p/12922598.html


猜你喜欢
- 昨天修改机顶盒上面的EPG页面,遇到一个小问题。用户购买游戏时需要弹出购买确认对话框,对话框的默认焦点规定必须停留在“取消”按键上。很简单的
- 效果图:搜索分类2种情况,一般的是当用户输入完,点击确定的按钮在向后发送请求,还有一种就是的我一边输入,一边向后台发送请求,但是会产生一个性
- 创建:list = [5,7,9]取值和改值:list[1] = list[1] * 5列表尾插入:list.append(4)去掉第0个值
- 安装SQL Server 遇到错误提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机!。找了半天
- 本文实例讲述了Python字符串拼接、截取及替换方法。分享给大家供大家参考,具体如下:python字符串连接python字符串连接有几种方法
- MYSQL初学者使用指南与介绍 一、连接MYSQL。 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的M
- 下面为您介绍sql下用了判断各种资源是否存在的代码,需要的朋友可以参考下,希望对您学习sql的函数及数据库能够有所帮助。-- 库是否存在if
- 简单Python词法分析器实现,供大家参考,具体内容如下词法分析器状态转换图:词法分析器总流程图:预处理程序:词法分析器:词法分析器程序详细
- 本文实例为大家分享了微信小程序实现搜索框功能的具体代码,供大家参考,具体内容如下效果:wxml文件:<view class="
- 1. SyntaxTIMESTAMPDIFF(unit,begin,end); 根据单位返回时间差,对于传入的begi
- 如下所示:# -*- coding:utf-8 -*-from datetime import datetimeimport redef M
- datetime 时间包认识 datetime 时间包:date:日期;time:时间;所以 datetime 就是 日期与时间的结合体使用
- 海量数据库的查询优化及分页算法方案 原出处不详 摘自:www.21php.com 随着“ * ”建设的逐步深入和 * 信息化的高
- 环境:Windows, Python2.7一维情况:<span style="font-size:14px;"&g
- load与loads简介:在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是s
- 进程池代码演示方式一from multiprocessing import Pooldef deal_task(n): n -= 1 ret
- ---在仓储管理中经常会碰到的一个问题 一、关于LIFO与FIFO的简单说明 ---FIFO: First in, First out.先进
- LRU:least recently used,最近最少使用算法。它的使用场景是:在有限的空间中存储对象时,当空间满时,会按一定的原则删除原
- 本文实例为大家分享了Python OpenCV图像直方图和反向投影的具体代码,供大家参考,具体内容如下当我们想比较两张图片相似度的时候,可以
- 一、ZeroMQ概述 ZeroMQ(又名ØMQ,MQ,或zmq)像一个可嵌入的网络库,但其作用就像一个并发框