【DL经典回顾】激活函数大汇总(十七)(Softmax2d附代码和详细公式)

激活函数大汇总(十七)(Softmax2d附代码和详细公式)

更多激活函数见激活函数大汇总列表

一、引言

欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的角色,它们决定着神经元的输出,并且影响着网络的学习能力与表现力。鉴于激活函数的重要性和多样性,我们将通过几篇文章的形式,本篇详细介绍两种激活函数,旨在帮助读者深入了解各种激活函数的特点、应用场景及其对模型性能的影响。

在接下来的文章中,我们将逐一探讨各种激活函数,从经典到最新的研究成果。

限于笔者水平,对于本博客存在的纰漏和错误,欢迎大家留言指正,我将不断更新。

二、Softmax2d

softmax是一个数学函数,它将K个真实的数的向量作为输入,并将其转换为概率分布,参见图,即在应用softmax之前,向量分量可以是负的或大于0,但是在应用softmax之后,每个分量将在区间[0,1]中,这些分量的和等于1,所以我们可以把这些值解释为概率。

在这里插入图片描述

Softmax2d是一个在特定上下文中使用的术语,通常指的是在二维数据上应用的Softmax函数。这种形式的Softmax特别适用于处理图像或二维空间数据,其中需要对每个像素点或二维数据点进行多分类。它通常用于卷积神经网络(CNN)中的语义分割任务,其中模型需要为图像中的每个像素点分配一个类别标签。

1. 数学定义

假设有一个二维数据张量 X X X,其大小为 C × H × W C \times H \times W C×H×W,其中 C C C是类别数, H H H W W W分别是数据的高度和宽度。Softmax2d函数对每个位置 ( h , w ) (h, w) (h,w)上的 C C C个类别分数进行Softmax计算,公式定义为:

Softmax ⁡ 2 d ( X ) c , h , w = e X c , h , w ∑ k = 1 C e X k , h , w \operatorname{Softmax} 2 \mathrm{~d}(X)_{c, h, w}=\frac{e^{X_{c, h, w}}}{\sum_{k=1}^C e^{X_{k, h, w}}} Softmax2 d(X)c,h,w=k=1CeXk,h,weXc,h,w
对于给定位置 ( h , w ) (h, w) (h,w),这个公式计算属于每个类别 C C C的概率,确保了这些概率在每个位置的总和为1。

2. 函数特性

  • 归一化输出:Softmax2d确保了每个位置 ( h , w ) (h, w) (h,w)上所有类别的概率之和为1,有助于将模型输出解释为概率分布。
  • 区分度:通过指数运算,Softmax2d增强了模型对不同类别分数差异的敏感性,有助于区分各个类别。
  • 适用于多分类:特别适用于像素级多分类问题,如语义分割,每个像素点需要被分类到特定类别。

3. 导数

Softmax2d函数关于输入 X c , h , w X_{c, h, w} Xc,h,w的导数与标准Softmax类似,具有以下形式:

∂ Softmax ⁡ 2 d ( X ) c , h , w ∂ X i , h , w = Softmax ⁡ 2 d ( X ) c , h , w ( δ c i − Softmax ⁡ 2 d ( X ) i , h , w ) \frac{\partial \operatorname{Softmax} 2 \mathrm{~d}(X)_{c, h, w}}{\partial X_{i, h, w}}=\operatorname{Softmax} 2 \mathrm{~d}(X)_{c, h, w}\left(\delta_{c i}-\operatorname{Softmax} 2 \mathrm{~d}(X)_{i, h, w}\right) Xi,h,wSoftmax2 d(X)c,h,w=Softmax2 d(X)c,h,w(δciSoftmax2 d(X)i,h,w)
其中, δ c i \delta_{c i} δci是Kronecker delta函数,当 c = i c=i c=i时值为1,否则为0。这表明导数取决于特定位置的Softmax输出和类别间的交互。

4. 使用场景与局限性

使用场景

  • 语义分割:在需要对图像的每个像素进行分类的应用中,如语义分割任务,Softmax2d是一种常见的选择。
  • 图像处理的多分类问题:在图像处理的其他多分类问题中,如像素级标签预测,Softmax2d也很有用。

局限性

  • 计算资源:对于大型图像,Softmax2d的计算可能会消耗大量资源,尤其是当类别数很多时。
  • 类别不平衡问题:在存在显著类别不平衡的数据集上,Softmax2d可能偏向于主导类别,需要采取额外措施来缓解这个问题。

5.代码实现

下面是softmax2d函数的实现及其详细解读:

import numpy as npdef softmax2d(x):"""计算二维数据上的Softmax激活函数。参数:x -- 输入值,形状应为(C, H, W),其中C是类别数,H和W是二维数据的高度和宽度。返回:二维数据上的Softmax激活结果,形状同输入。"""# 防止数值溢出,从每个位置的分数中减去该位置的最大分数e_x = np.exp(x - np.max(x, axis=0, keepdims=True))# 按类别求和,以进行归一化,并保持维度一致以便于广播sum_e_x = np.sum(e_x, axis=0, keepdims=True)# 计算Softmaxsoftmax = e_x / sum_e_xreturn softmax

解读

  1. 数值稳定性:通过从输入x中减去每个位置(对应于高度和宽度)的最大分数,该步骤有助于防止在指数计算时发生数值溢出。这是一种常见的技巧,用于增加数值计算的稳定性,而不影响Softmax函数的输出结果。

  2. 指数计算和归一化np.exp(x - np.max(x, axis=0, keepdims=True))计算调整后的指数值。通过在axis=0(类别维度)上对这些指数值求和,并保持维度(keepdims=True)以便于广播,我们可以得到归一化的分母。

  3. Softmax计算:最后,通过将每个指数值除以归一化的分母,计算得到每个位置上每个类别的Softmax概率。

示例和输出

给定形状为(3, 4, 4)的输入x(模拟3个类别在4x4的图像上的分数),函数输出了对应的Softmax2d激活结果。输出验证了Softmax概率在每个位置(对于所有类别)的总和为1,这符合Softmax函数的性质。

三、参考文献

虽然Softmax2d本身可能不经常作为单独的研究焦点,但你可以在以下类型的文献中找到关于Softmax函数及其在图像处理任务中应用的深入讨论:

  1. Long, J., Shelhamer, E., & Darrell, T. (2015). “Fully convolutional networks for semantic segmentation.” In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 3431-3440). 这篇论文介绍了全卷积网络(FCN)在语义分割任务中的应用,其中Softmax函数用于为每个像素点分配类别标签,是理解Softmax2d在图像分割中应用的良好起点。
  2. Chen, L.-C., Papandreou, G., Kokkinos, I., Murphy, K., & Yuille, A. L. (2018). “DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs.” IEEE Transactions on Pattern Analysis and Machine Intelligence, 40(4), 834-848. DeepLab模型采用了Softmax函数进行像素级分类,该研究展示了如何在深度学习模型中有效地使用Softmax来处理复杂的图像分割任务。
  3. He, K., Zhang, X., Ren, S., & Sun, J. (2016). “Deep Residual Learning for Image Recognition.” In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 770-778). 虽然这篇论文主要聚焦于残差网络(ResNet)和图像识别,但它为理解深度学习模型中Softmax函数的作用提供了坚实的基础,包括在多分类问题中的应用。

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

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

相关文章

双指针算法_复写零

题目: 给一个固定长度的数组arr,将数组中出现的每一个0都复写一遍,并且将其余元素都往右移动 且不要再超过数组长度的位置写入元素,在数组上直接修改 示例: 双数组模拟操作: 从示例来看,因为…

精简版 Obsidian 图床配置 PicGo+ gitee

精简版 Obsidian 图床配置 PicGo gitee 图床的作用 图床(Image Hosting Service)是一种在线服务,用于存储和托管用户上传的图片文件。用户可以将图片上传到图床服务器,并获得一个可访问的图片链接,然后可以在网页、博…

词令微信小程序怎么添加到我的小程序?

微信小程序怎么添加到我的小程序? 1、找到并打开要添加的小程序; 2、打开小程序后,点击右上角的「…」 3、点击后底部弹窗更多选项,请找到并点击「添加到我的小程序」; 4、添加成功后,就可以在首页下拉我的…

Linux使用Docker部署Registry结合内网穿透实现公网远程拉取推送镜像

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

day05-SpringBootWeb请求响应

请求响应: 请求(HttpServletRequest):获取请求数据响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器&#xf…

音频切割如何操作?剪辑音乐入门教程

随着数字音乐时代的来临,音频编辑和音乐剪辑成为了越来越多人的必备技能。无论是想要制作个人音乐作品,还是想要为视频添加背景音乐,了解如何切割和剪辑音频都是非常重要的。本文将为你提供一份音频切割和音乐剪辑的入门教程,帮助…

十四届蓝桥杯省赛Java B组 合并区域

就是将两个矩阵进行拼接,两矩阵可以旋转90 180 270 度。 因为数据比较小,所以这基本上就是一个大的枚举模拟加搜索,直接暴力求解。 import java.io.*; import java.util.*;public class Main{static int n;static int N 101;static int mo…

《荒野大镖客》等优秀的国产游戏能成为国产3a的标杆吗

中国或许不需要3A,但对于一些玩家来说,国产3A更多的是一个梦想,就像动画爱好者期待的优秀国产2D动画一样。 提问者所说的“玩家众多”,其实非核心玩家占比很高。 其中有一些是《王者荣耀》、《和平精英》等轻手游玩家或者国内二次…

8 个最佳 Android 联系人恢复软件/应用程序 [很少有人知道]

丢失 Android 手机上的联系信息可能会令人沮丧,尤其是如果您没有在备份或其他平台上进行备份。但是,不必惊慌,因为有很多适用于Android的联系人恢复软件可用。我们了解找回丢失的联系人的重要性,这就是我们今天测试 8 个出色的联系…

C#构建类库

类库程序集能将类型组合成易于部署的单元(DLL文件),为了使编写的代码能够跨多个项目重用,应该将他们放在类库程序集中。 一、创建类库 在C#中,构建类库是指创建一个包含多个类的项目,这些类可以被其他应用…

[Vue]组件间通讯

Vue组件间通讯 父子间通讯 非父子间通讯 父子间通讯 父组件通过 props 将数据传递给子组件父向子传值步骤 给子组件以添加属性的方式传值 子组件内部通过props接收 模板中直接使用 props接收 子组件利用 $emit 通知父组件修改更新 $emit触发事件,给父组件…

6、Design Script之列表

Range 在DesignScript中,Range是从起点到终点的一系列数字,使用指定的步距(间距类型),并有以下的初始化方法: start..end..step; start..end..#amount; start..end..~approximate; Range可以是数字的,也可以是字母的。 字母范围因大小写而异。 开始,结束. .#数量范围(…