Softmax函数原理及Python实现过程解析


Posted in Python onMay 22, 2020

Softmax原理

Softmax函数用于将分类结果归一化,形成一个概率分布。作用类似于二分类中的Sigmoid函数。

对于一个k维向量z,我们想把这个结果转换为一个k个类别的概率分布p(z)。softmax可以用于实现上述结果,具体计算公式为:

Softmax函数原理及Python实现过程解析

对于k维向量z来说,其中zi∈R,我们使用指数函数变换可以将元素的取值范围变换到(0,+∞),之后我们再所有元素求和将结果缩放到[0,1],形成概率分布。

常见的其他归一化方法,如max-min、z-score方法并不能保证各个元素为正,且和为1。

Softmax性质

输入向量x加上一个常数c后求softmax结算结果不变,即:

Softmax函数原理及Python实现过程解析

我们使用softmax(x)的第i个元素的计算来进行证明:

Softmax函数原理及Python实现过程解析

函数实现

由于指数函数的放大作用过于明显,如果直接使用softmax计算公式

Softmax函数原理及Python实现过程解析

进行函数实现,容易导致数据溢出(上溢)。所以我们在函数实现时利用其性质:先对输入数据进行处理,之后再利用计算公式计算。具体使得实现步骤为:

  • 查找每个向量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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python生成随机验证码(中文验证码)示例
Apr 03 Python
python base64 decode incorrect padding错误解决方法
Jan 08 Python
Python中的面向对象编程详解(下)
Apr 13 Python
python使用win32com库播放mp3文件的方法
May 30 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
python 排序算法总结及实例详解
Sep 28 Python
python机器学习库常用汇总
Nov 15 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
Python将list元素转存为CSV文件的实现
Nov 16 Python
python实现腾讯滑块验证码识别
Apr 27 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 Python
Python接口测试文件上传实例解析
May 22 #Python
计算Python Numpy向量之间的欧氏距离实例
May 22 #Python
python numpy矩阵信息说明,shape,size,dtype
May 22 #Python
python查看矩阵的行列号以及维数方式
May 22 #Python
30行Python代码实现高分辨率图像导航的方法
May 22 #Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 #Python
Python pandas如何向excel添加数据
May 22 #Python
You might like
星际争霸 Starcraft 编年史
2020/03/14 星际争霸
通过php修改xml文档内容的方法
2015/01/23 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
js如何获取object类型里的键值
2014/02/18 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
JS实现的最简Table选项卡效果
2015/10/14 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
Python实现各种排序算法的代码示例总结
2015/12/11 Python
Python生成随机验证码的两种方法
2015/12/22 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
对python中Json与object转化的方法详解
2018/12/31 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
Python目录和文件处理总结详解
2019/09/02 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
计算机个人求职信范例
2014/01/24 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
校长四风对照检查材料
2014/09/27 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
2014年度考核工作总结
2014/12/24 职场文书
留学推荐信英文范文
2015/03/26 职场文书
停水通知
2015/04/16 职场文书
Nginx 常用配置
2022/05/15 Servers
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL