softmax函数与交叉熵损失详解

文章目录

  • 一、softmax函数
    • 1.1 引入指数形式的优点
    • 1.2 引入指数形式的缺点
  • 二、交叉熵损失函数
    • 2.1 交叉熵损失函数
    • 2.2 softmax与交叉熵损失
  • 参考资料

一、softmax函数

softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!

假设我们有一个数组,Z,Zi表示Z中的第i个元素,那么这个元素的softmax值就是:
在这里插入图片描述
更形象的如下图表示:
在这里插入图片描述
softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!

1.1 引入指数形式的优点

从上述 y = e x y = e^{x} y=ex函数图像指数函数中可以看出,曲线呈现递增趋势,最重要的是斜率逐渐增大,也就是说在x轴上一个很小的变化,可以导致y轴上很大的变化。这种函数曲线能够将输出的数值拉开距离。

假设拥有三个输出节点的输出值为为[2, 3, 5]。我们来尝试 不使用指数函数使用指数函数的Softmax函数 计算会产生什么区别。

import tensorflow as tfprint(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)

结果还是挺明显的,经过使用指数形式的Softmax函数能够将差距大的数值距离拉的更大。

另外,在深度学习中通常使用反向传播求解梯度进而使用梯度下降进行参数更新的过程,使用指数函数在求导的时候比较方便。

1.2 引入指数形式的缺点

指数函数的曲线斜率逐渐增大虽然能够将输出值拉开距离,但是也带来了缺点,当 z i z_{i} zi 值非常大的话,计算得到的数值也会变的非常大,数值可能会溢出。

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

当然针对数值溢出有其对应的优化方法,将每一个输出值减去输出值中最大的值。
在这里插入图片描述

import numpy as npscores = 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]

二、交叉熵损失函数

2.1 交叉熵损失函数

交叉熵函数为在处理分类问题中常用的一种损失函数,用于描述模型预测值与真实值的差距大小,其具体公式为:

在这里插入图片描述

其中,p为真实值,q为预测值。

这里,关于交叉熵的具体介绍参见博客:损失函数——交叉熵损失函数(CrossEntropy Loss)

交叉熵损失函数在Python中的具体实现如下:

# tensorflow version
loss = tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y), reduction_indices=[1]))# numpy version
loss = np.mean(-np.sum(y_*np.log(y), axis=1))# pytorch version
entroy=nn.CrossEntropyLoss()

2.2 softmax与交叉熵损失

当使用Softmax函数作为输出节点的激活函数的时候,一般使用交叉熵作为损失函数。

由于Softmax函数的数值计算过程中,很容易因为输出节点的输出值比较大而发生数值溢出的现象,在计算交叉熵的时候也可能会出现数值溢出的问题。为了数值计算的稳定性,TensorFlow提供了一个统一的接口,将Softmax与交叉熵损失函数同时实现,同时也处理了数值不稳定的异常,使用TensorFlow深度学习框架的时候,一般推荐使用这个统一的接口,避免分开使用Softmax函数与交叉熵损失函数。

TensorFlow提供的统一函数式接口为:

import tensorflow as tfprint(tf.__version__) # 2.0.0
tf.keras.losses.categorical_crossentropy(y_true, y_pred, from_logits = False)

中y_true代表了One-hot编码后的真实标签,y_pred表示网络的实际预测值:

  • 当from_logits设置为True时,y_pred表示未经Softmax函数的输出值;
  • 当from_logits设置为False时,y_pred表示为经过Softmax函数后的输出值;

为了在计算Softmax函数时候数值的稳定,一般将from_logits设置为True,此时 tf.keras.losses.categorical_crossentropy 将在内部进行Softmax的计算,所以在不需要在输出节点上添加Softmax激活函数。

参考资料

  • Softmax函数详解与推导
  • 一文详解Softmax函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++ 内存管理】深拷贝和浅拷贝你了解吗?

文章目录 1.深拷贝2.浅拷贝3.深拷贝和浅拷贝 1.深拷贝 🍎 深拷⻉: 是对对象的完全独⽴复制,包括对象内部动态分配的资源。在深拷⻉中,不仅复制对象的值,还会复制对象所指向的堆上的数据。 特点: 🐧① 复制对…

记录一下 log4j的漏洞

目录 背景 bug的产生 bug复现 JNDI 网络安全学习路线 (2024最新整理) 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明: 背景 log4j这次的bug,我相信大家都已经知道了,仅以…

【unity小技巧】减少Unity中的构建打包大小

文章目录 正常默认打包查看编辑器打包日志压缩图片压缩网格模型压缩贴图压缩音频文件只打64位包最终大小完结 正常默认打包 这里以安卓为例。先什么都不干,直接打包安卓apk,查看包大小 查看编辑器打包日志 搜索build report构建报告。构建报告我们应该…

Pytorch学习-引言

Pytorch相关链接 Pytorch官方网站 https://pytorch.org/ Pytorch的Github仓库 https://github.com/pytorch/pytorch Pytorch论坛 https://discuss.pytorch.org/ Pytorch离线下载包链接 https://download.pytorch.org/whl/torch_stable.html Pytorch学习视频推荐链接 http://【…

手写一个SPI FLASH 读写擦除控制器

文章目录 flash读写数据的特点1. 扇擦除SE(Sector Erase)1.1 flash_se 模块设计1.1.1 信号连接示意图:1.1.2 SE状态机1.1.3 波形图设计:1.1.4 代码 2. 页写PP(Page Program)2.1 flash_pp模块设计2.1.1 信号连接示意图:…

JavaScript 对象入门:基础用法全解析

目录 对象 语法 属性和访问 方法和调用 this关键字 null 遍历对象 内置对象 Math 属性 方法 Date 创建日期对象 获取和设置日期 ⭐对象 对象是 JavaScript 数据类型的一种,数据类型也包括数值类型、字符串类型、布尔类型、undefined。对象数据类型可…

程序员之路:裁员与内卷下的生存之道

作为一名普通的程序员,身处这个瞬息万变的IT行业,面对着今年不断加剧的裁员浪潮和日益激烈的内卷竞争,我时常感到焦虑和不安。然而,正是这些挑战,让我们更加深入地思考了在这个行业中,我们该如何找到自己的…

2024统计建模中国新质生产力统计测度与时空演变及其驱动因素研究

高质量成品论文46页word版本1.5w字书写完整数据集1000行py代码一等奖论文!这里仅展示部分内容,完整版在下面的链接。 【1.5w字全网最佳】2024统计建模大赛高质量成品论文39页配套完整代码运行全套数据集https://www.jdmm.cc/file/2710661/ 中国新质生产…

【2024HNCTF】密码组部分出题记录

2024H&NCTF 密码组部分出题记录 题目:BabyPQ、HappyDance 文章目录 2024H&NCTF 密码组部分出题记录BabyPQ | 签到HappyDance BabyPQ | 签到 本题为nc交互题,之所以采用这种形式,是因为可能有很多密码新师傅们不了解这种赛题形式&a…

AI机器人火了,探讨早就可以帮我们开拓市场的中关村科金语音机器人

近期AI机器人给我们带来了不少惊喜,比如国外 Figuer 联合 OpenAI 做了 Chatgpt 机器人,可以通过对话后推理干活,国内仿生机器人员工也开始量产,看到AI机器人不禁想到会不会替代我们的工作?我们了解到很多机器人厂家的…

#初阶模板

目录 1.泛型编程 2.模板 (1)函数模板 (2)举个栗子(模板的使用) 1.模板的声明有两种形式 2.函数模板的原理 (3)模板参数的匹配原则 (4)类模板 类模板…

AI图像生成-原理

一、图像生成流程总结 【AI绘画】深入理解Stable Diffusion!站内首个深入教程,30分钟从原理到模型训练 买不到的课程_哔哩哔哩_bilibili 二、如果只是用comfy UI生成图片 1、找到下面几个文件,把对应模型移动到对应文件夹即可使用 2、选择对…

大学c语言基础很差,能不能学51单片机?会不会很困难?

开始前我分享下我的经历,我刚入行时遇到一个好公司和师父,给了我机会,一年时间从3k薪资涨到18k的, 我师父给了一些51单片机学习方法和资料,让我不断提升自己,感谢帮助过我的人, 如大家和我一样…

python turtle 升国旗

​一、导语 大家好,前段时间,我们画出了五星红旗,今天我们要用Python的Turtle库来绘制一个五星红旗,并让国旗上升,让我们一起来感受编程与艺术的完美结合吧!领略国家的强大!爱祖国,做一个遵纪守法的好公民。 二、效果展示 升国旗 三、开发过程 一、准备工作 首先我们…

OpenAI深夜震撼发布最新模型GPT-4o,送上最快速便捷教程

北京时间5月14日凌晨,有人说OpenAI一夜改变了历史。 在我们的深夜、太平洋时间的上午 10 点,OpenAI 召开春季发布会,公布了最新的GPT-4o模型,o代表Omnimodel(全能模型)。20多分钟的演示直播,展…

美国加州正测试ChatGPT等生成式AI,在4大部门应用

5月11日,美联社消息,美国加州政府正在测试ChatGPT等生成式AI,应用在税收和收费管理部、交通部、公共卫生部以及卫生与公众服务部4大部门。 测试时间6个月,为其提供技术支持的一共有5家公司,分别是OpenAI、Anthropic、…

成都新增数字产业园,打造生态经济新引擎

成都产业园运营方树莓集团——数字产业生态链建设者。秉持高效、友善、敢为的集团核心文化,有效链接政、产、企、校四个板块,构建了产业生态闭环系统。在成都市区内,已布局了多家数字文创产业园,其中具有代表性的参考国际数字影像…

Linux 第三十一章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

GRFB-UNet:一种新的多尺度注意力网络,用于铺路分割

不同场景下的带注释的触觉铺装示例: GRFB-UNet网络结构: GRFB模块的结构: 铺路在视障人士的旅行中起着至关重要的作用。因此,识别铺装的形状和位置以支持视障人士的移动性是相当有意义的,而视觉分割技术就适合这项任务。为了有效提高触觉铺装分割的精度和鲁棒性,…

httpsok-v1.11.0支持CDN证书自动部署

🔥httpsok-v1.11.0支持CDN证书自动部署 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx 、OpenResty 服务器设计。已服务众多中小企业,稳定、安全、可靠。 一行命令,一分钟轻松搞定SSL证书自动续期 v1.11.0 版…