【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 np

def 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)
    # 计算Softmax
    softmax = e_x / sum_e_x
    return 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函数的作用提供了坚实的基础,包括在多分类问题中的应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器硬件命令

一、查看机器核数 有以下几种方法 1、lscpu命令 lscpu命令可以显示关于CPU的信息,包括核数、线程数等。在终端中输入以下命令即可查看CPU核数:该命令会输出CPU每个物理插槽的核数。 lscpu | grep "Core(s) per socket" | awk {print $NF} …

zed2i录制前的准备

录制前需设置文件主要有两个 文件一:catkin_zed/src/zed-ros-wrapper-3.8.x/zed_wrapper/params/common.yaml # params/common.yaml # Common parameters to Stereolabs ZED and ZED mini cameras ---# Dynamic parameters cannot have a namespace brightness: …

力扣大厂热门面试算法题 36-38

36. 有效的数独,37. 解数独,38. 外观数列,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.16 可通过leetcode所有测试用例。 目录 36. 有效的数独 解题思路 完整代码 Java Python 37. 解数独 解题思…

ElementUI Message 消息提示,多个显示被覆盖的问题

现象截图&#xff1a; 代码&#xff1a;主要是在this.$message 方法外层加上 setTimeout 方法 <script> export default {name: "HelloWorld",props: {msg: String,},methods: {showMessage() {for (let i 0; i < 10; i) {setTimeout(() > {this.$mess…

k8s-高可用etcd集群 26

reset掉k8s2&#xff0c;k8s3&#xff0c;k8s4节点 清理完网络插件后重启 快速创建一个k8s集群 修改初始化文件 添加master节点 备份 查看etcd配置 启动docker 将etcd二进制命令从容器拷贝到本机 备份 查看快照状态 删除集群资源 恢复 停掉所有的核心组件 从快照恢复 重启所有…

如何在CasaOS系统玩客云中安装内网穿透工具实现远程访问内网主机下载资源

文章目录 1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 2月底&#xff0c;玩客云APP正式停止运营&#xff0c;不再提供上传、云添加功能。3月初&#xff0c;有用户进行了测试&#xff0c;局域网内的各种服务还能继续使用&#xff0c;但…

加密算法 —— 有哪些容易入门且实用的算法?

一、背景 对于初学者来说&#xff0c;一些相对容易入门且实用的加密算法如下&#xff1a; 1. Caesar Cipher&#xff08;凯撒密码&#xff09;: - 凯撒密码是最简单的替换式加密算法之一&#xff0c;通过将字母按照固定位数向前或向后偏移来进行加密。尽管在现代安全场景下…

API接口数据集接口pytorch api接口获取数据

API是应用程序的开发接口&#xff0c;在开发程序的时候&#xff0c;我们有些功能可能不需要从到到位去研发&#xff0c;我们可以拿现有的开发出来的功能模块来使用&#xff0c;而这个功能模块&#xff0c;就叫做库(libary)。比如说&#xff1a;要实现数据传输的安全&#xff0c…

外贸干货|小白必须知道的六大开发信模板!

外贸人必看的开发信模板&#xff08;建议收藏学习&#xff09; 一封好的开发信是开发客户环节里至关重要的节点。 大体上需得简洁明了、开门见山、立意明确。内容上要注重客户需求和问题的解决。另外&#xff0c;高质量的开发信一定不是千篇一律的&#xff0c;而是“入乡随俗…

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——遗传算法(GA)

基于python语言&#xff0c;采用经典遗传算法&#xff08;GA&#xff09;对 需求拆分车辆路径规划问题&#xff08;SDVRP&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作&#xff0c;目前已经成熟的…

RISC-V 编译环境搭建:riscv-gnu-toolchain 和 riscv-tools

RISC-V 编译环境搭建&#xff1a;riscv-gnu-toolchain 和 riscv-tools 编译环境搭建以及说明 操作系统&#xff1a;什么系统都可以 虚拟机&#xff1a;VMmare Workstation Pro 17.50.x (版本不限) 编译环境&#xff1a;Ubuntu 18.04.5 CPU&#xff1a;i7-8750h(虚拟机分配4核…

[ C++ ] STL---string类的使用指南

目录 前言&#xff1a; string类简介 string类的常用接口 string类对象的构造函数 string类对象的赋值运算符重载 string类对象的容量操作 string类对象的访问与遍历 [ ] 下标遍历 迭代器遍历 普通迭代器iterator ​编辑 const迭代器const_iterator 反向迭代器rever…

远超预期,特效吹爆!《武庚纪》:建议漫改都按这个标准来!

作为《武庚纪》动画党&#xff0c;听闻要改编成真人电视剧时&#xff0c;最害怕的无非五毛钱特效&#xff0c;流水线仙侠&#xff0c;无脑古偶。但在看过《烈焰》&#xff08;原名&#xff1a;武庚纪&#xff09;之后&#xff0c;不得不感叹一句&#xff1a;“倒也不用这么还原…

SQL注入攻击原理与自动化检测技术的深度探究及其实战应用

SQL注入原理 SQL注入攻击的原理是基于攻击者能够控制应用程序与数据库之间的SQL查询。当应用程序将用户输入的数据直接嵌入到SQL查询中&#xff0c;而没有进行适当的验证或转义时&#xff0c;攻击者就可以通过输入精心构造的数据来操纵SQL查询的逻辑。 例如&#xff0c;假设有…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ColumnSplit)

将子组件纵向布局&#xff0c;并在每个子组件之间插入一根横向的分割线。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 ColumnSplit通过分割线限制子组件的高度。初始…

配置vscode环境极简版(C/C++)(图文)

前言 众所周知&#xff0c;vscode是一个代码编辑器&#xff0c;不能直接编译运行我们敲的代码&#xff0c;必须提前配置好环境&#xff0c;而这也是劝退一众小白的一大重要因素&#xff0c;下面我想以一种提纲挈领的方式带大家走一遍从配置环境到运行实操代码的全过程。 安装…

从 VNCTF2024 的一道题学习QEMU Escape

说在前面 本文的草稿是边打边学边写出来的&#xff0c;文章思路会与一个“刚打完用户态 pwn 题就去打 QEMU Escape ”的人的思路相似&#xff0c;在分析结束以后我又在部分比较模糊的地方加入了一些补充&#xff0c;因此阅读起来可能会相对轻松。&#xff08;当然也不排除这是…

18-结构体(初识)

18-1 概念 我们现在已经知道的数据类型&#xff1a; char short int long float double 但是当我们需要描述一个复杂对象时&#xff0c;这些数据类型单独拿出来不能满足&#xff0c;如&#xff1a; 人&#xff1a;名字年龄性别地址电话 书&#xff1a;书名作者出版社定价书…

DHCP-SNOOPING-嗅探/窥探

DHCP-SNOOPING 私接设备了&#xff0c;非终端收到了报文 所有接口设置为非信任&#xff0c;然后单独配置其中一个接口为信任

Elasticsearch:从 Java High Level Rest Client 切换到新的 Java API Client

作者&#xff1a;David Pilato 我经常在讨论中看到与 Java API 客户端使用相关的问题。 为此&#xff0c;我在 2019 年启动了一个 GitHub 存储库&#xff0c;以提供一些实际有效的代码示例并回答社区提出的问题。 从那时起&#xff0c;高级 Rest 客户端 (High Level Rest Clie…