一文详解Softmax函数

2023-05-16

一、什么是Softmax?

Softmax从字面上来说,可以分成soft和max两个部分。max故名思议就是最大值的意思。Softmax的核心在于soft,而soft有软的含义,与之相对的是hard硬。很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的hardmax。

import tensorflow as tf

print(tf.__version__) # 2.0.0
a_max = tf.reduce_max([1, 2, 3, 4, 5])
print(a_max) # tf.Tensor(5, shape=(), dtype=int32)

通过上面的例子可以看出hardmax最大的特点就是只选出其中一个最大的值,即非黑即白。但是往往在实际中这种方式是不合情理的,比如对于文本分类来说,一篇文章或多或少包含着各种主题信息,我们更期望得到文章对于每个可能的文本类别的概率值(置信度),可以简单理解成属于对应类别的可信度。所以此时用到了soft的概念,Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。

下面给出Softmax函数的定义(以第i个节点输出为例):
softmax

,其中 zi为第i个节点的输出值,C为输出节点的个数,即分类的类别个数。通过Softmax函数就可以将多分类的输出值转换为范围在[0, 1]和为1的概率分布。

二、引入指数形式的优点

import tensorflow as tf

print(tf.__version__) # 2.0.0
a = tf.constant([2, 3, 5], dtype = tf.float32)

b1 = a / tf.reduce_sum(a) # 不使用指数
print(b1) # tf.Tensor([0.2 0.3 0.5], shape=(3,), dtype=float32)

b2 = tf.nn.softmax(a) # 使用指数的Softmax
print(b2) # tf.Tensor([0.04201007 0.11419519 0.8437947 ], shape=(3,), dtype=float32)
  1. 经过使用指数形式的Softmax函数能够将差距大的数值距离拉的更大。
  2. 在深度学习中通常使用反向传播求解梯度进而使用梯度下降进行参数更新的过程,而指数函数在求导的时候比较方便。

三、引入指数形式的缺点

  1. 指数函数的曲线斜率逐渐增大虽然能够将输出值拉开距离,但是也带来了缺点,当输出值非常大的话,计算得到的数值也会变的非常大,数值可能会溢出。
import numpy as np

scores = np.array([123, 456, 789])
softmax = np.exp(scores) / np.sum(np.exp(scores))
print(softmax) # [ 0.  0. nan]

当然针对数值溢出有其对应的优化方法,将每一个输出值减去输出值中最大的值。

改进

import numpy as np

scores = np.array([123, 456, 789])
scores -= np.max(scores)
p = np.exp(scores) / np.sum(np.exp(scores))
print(p) # [5.75274406e-290 2.39848787e-145 1.00000000e+000]

单个输出节点的二分类问题一般在输出节点上使用Sigmoid函数,拥有两个及其以上的输出节点的二分类或者多分类问题一般在输出节点上使用Softmax函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文详解Softmax函数 的相关文章

随机推荐

  • C++ 如何获取数组/容器的长度?

    文章目录 一 获取数组的长度1 sizeof a sizeof a 2 end a begin a 二 获取标准库容器的长度三 数组作为函数参数时 xff0c 在函数中无法获取其长度 一 获取数组的长度 1 sizeof a sizeof
  • 计算机网络期末复习题

    1 请简述在划分子网的情况下 xff0c 路由器转发IP数据报的基本过程 答 xff1a 在划分子网的情况下 xff0c 路由器转发分组的算法如下 xff1a 1 从收到的数据报首部提取目的IP地址D xff08 1分 xff09 2 先判
  • Jetson TX1 TX2 IO 引脚设置

    有朋友问我引脚问题 xff0c 我就把一段文档摘抄在这里了 希望对大家有用 配置40引脚扩展接头 主屏幕 兼容的硬件屏幕 40引脚扩展标题屏幕 命令行界面 设备树覆盖 创建简单的设备树覆盖 为40针接头连接器创建自定义设备树覆盖 启动Jet
  • Android手机怎样投屏到win10(无需联网)

    一 前言 适用场景 xff1a 无可用wifi 想获得大屏观影体验 x1f601 二 具体操作 PC端 在Cortana处搜索 投影设置 投影到此电脑 处的设置如下如图 xff08 也可根据自己习惯调整 xff09 安卓端 华为手机为例 打
  • Windows远程控制ubuntu16.04的vnc教程(附灰屏和无鼠标只显示叉号的解决方案)

    VNC可远程Linux的桌面 xff0c 不仅仅只可以远程终端窗口 xff0c 操作起来要比ssh好用 xff0c 效果如图 VNC介绍 xff1a VNC Virtual Network Console xff0c 即虚拟网络控制台 xf
  • 联邦学习安全与隐私保护

    一 FL隐私保护方法 1 1 加密方法 通过将明文编码为密文的方式 xff0c 只允许特定人员解码 xff0c 为数据隐私保护提供了有效手段 xff0c 但往往需要较大的计算开销 xff0c 较难应用于实际场景中 安全多方计算 SMC研究的
  • vue - vue项目对axios请求的封装

    axios介绍 axios是基于promise的网络请求库 xff0c 可以在nodejs和浏览器中运行 在服务端axios使用原生的nodejs的http模块 xff0c 在客户端浏览器中则而是用xmlhttprequests xff0c
  • C++总结——语法篇

    Static关键字1 静态全局变量2 静态局部变量3 静态函数4 静态数据成员5 静态成员函数 引用引用与指针的区别 左值 右值 左值引用 右值引用 new delete与malloc free Static关键字 1 静态全局变量 sta
  • Android开发快速入门及导出apk

    环境及工具准备 jdk安装配置安装android studio或idea xff08 推荐直接使用idea xff0c android studio其实也是基于idea开发的 xff09 配置android sdk安装一个安卓模拟器 xff
  • 在阿里云搭建CENTOS7系统以及图形界面

    1 搭建CentOS7操作系统服务器 首先要购买服务器 xff0c 推荐学生认证可以获得好几个月的免费服务器 略去具体的过程 阿里云默认的系统不是CentOS7 xff0c 所以需要先将操作系统改成CentOS7 在实例的基本信息中 xff
  • linux基础学习,有相应的笔记文件XMind和Word(基于centos8(主要的)和Ubuntu20),里面有linux基本操作指令和JavaEE,大数据相关的shell。2021年4月26日

    前面的话 这篇文章是我学习linux的一个记录 xff0c 我是用XMind记笔记的 xff0c 然后转换为Word最后粘贴到这里的 xff0c 如果感兴趣的话 xff0c 可以下载我上传的文件 xff0c 都是免费的 xff0c 大家共同
  • MapReduce的详细使用

    MapReduce 文章目录 MapReduce1 常用数据序列化类型2 编程规范 xff08 三个阶段 xff09 Mapper阶段Reducer阶段Driver阶段 3 编程环境准备4 简单案例 单词统计 5 序列化序列化概述自定义 b
  • STM32-串口通信详解

    目录 前言 一 通信接口背景知识 1 并行通信和串行通信 2 串行通信的分类 二 STM32的串口通信基础 1 串口通信接口 2 串口通信框图 3 串口通信相关寄存器 4 波特率计算方法 三 库函数配置 1 串口配置一般步骤 总结 前言 众
  • 【SDN控制器分析之一】ONOS架构概述

    ONOS 设计目标 ONOS是一个采用OSGI技术来管理子项目的SDN控制器开源项目 xff0c 在最初设计时有这么几个目标是明确的 xff1a 代码模块化 xff1a 支持把新的功能作为新的独立单元引入特性可配置 xff1a 无论是在启动
  • 如何让matlab形成多图共用颜色条?

    需求 xff1a 使用matlab命令tile layout功能 xff0c 从文件中读取名称不同的8组图片 xff0c 每组包含5个具有递增编号的图片 xff0c 实现的效果是 xff0c 返回一张8x5的大图 xff0c 也就是8行5列
  • js中为什么基本数据类型能调用对象方法

    在js中数据类型被分为两大类 基本数据类型引用数据类型 引用数据类型可以使用原型对象中内置的实例方法 为了更方便开发人员操作基本数据类型 xff0c 在基本数据类型中也有内置的方法 这些方法放在es三个特殊引用类型 xff08 基本包装类型
  • docker基本管理一:镜像管理

    本章主要介绍docker 镜像的查找 下载 列出 删除以及创建等 镜像是什么 xff1f 在docker中 xff0c 镜像是容器的模板 容器中的虚拟机都是以镜像为模板创建的 docker 为镜像的创建和更新提供了简单的机制 xff0c 用
  • ST-Link的红灯一直异常闪烁

    ST Link的红色指示灯一直异常闪烁 xff0c 并且keil识别不到芯片 解决办法 xff0c 将HUB拔掉 xff0c 直连PC机 xff0c 排查发现是延长线只有充电 xff0c 没有数据传输DP DN
  • 每日lodash源码阅读(一)——createMathOperation

    每日lodash源码阅读 xff08 一 xff09 createMathOperation 一 写在前面二 使用举例三 源码分析add jscreateMathOperation js 一 写在前面 createMathOperation
  • 一文详解Softmax函数

    一 什么是Softmax xff1f Softmax从字面上来说 xff0c 可以分成soft和max两个部分 max故名思议就是最大值的意思 Softmax的核心在于soft xff0c 而soft有软的含义 xff0c 与之相对的是ha