当前位置: 首页 > article >正文

多标签多分类 用什么函数激活

在多标签多分类任务中,激活函数的选择需要根据任务特性和输出层的设计来决定。以下是常见的激活函数及其适用场景:

一、多标签分类任务的特点

  • 每个样本可以属于多个类别(标签之间非互斥,例如一篇文章可能同时属于 “科技” 和 “财经”)。
  • 输出层通常为
    • 神经元数量等于标签总数(每个神经元对应一个二分类任务)。
    • 输出值需表示 “属于该标签的概率” 或 “是否存在该标签”。

二、常用激活函数及适用场景

1. Sigmoid 激活函数(最常用)
  • 应用场景
    • 每个标签是独立的二分类问题(如 “是否属于标签 A”“是否属于标签 B”)。
    • 输出值范围为 \((0, 1)\),可视为标签的概率(需配合阈值判断,如 \(>0.5\) 则判定为正样本)。
  • 示例

    python

    运行

    import torch
    import torch.nn as nnclass MultiLabelModel(nn.Module):def __init__(self, input_size, num_labels):super().__init__()self.fc = nn.Sequential(nn.Linear(input_size, 128),nn.ReLU(),  # 隐藏层用ReLUnn.Linear(128, num_labels))self.activation = nn.Sigmoid()  # 输出层用Sigmoiddef forward(self, x):x = self.fc(x)return self.activation(x)
    
  • 优点
    • 直接支持多标签独立预测,输出值可解释为概率。
    • 适合标签之间无依赖关系的场景(如图片标注中的 “猫”“狗”“汽车” 可同时存在)。
  • 注意
    • 需设置合理阈值(如根据任务调整为 \(>0.3\) 或 \(>0.7\))来决定标签是否激活。
    • 若标签总数很大(如数万级),需注意计算效率。
2. Softmax 激活函数(特殊场景:互斥多标签分类)
  • 应用场景
    • 极少数情况下,若标签之间是互斥的多标签分类(即样本必须属于多个互斥类别中的一组,如 “颜色 + 尺寸” 的组合),但这种场景非常罕见。
    • 不建议直接使用,因为多标签任务通常允许标签共存,而 Softmax 强制输出概率和为 1,会抑制标签的独立性。
  • 示例(仅作原理演示,实际中极少使用):

    python

    运行

    class RareMultiLabelModel(nn.Module):def __init__(self, input_size, num_labels):super().__init__()self.fc = nn.Sequential(nn.Linear(input_size, 128),nn.ReLU(),nn.Linear(128, num_labels))self.activation = nn.Softmax(dim=1)  # 输出层用Softmax(仅适用于互斥标签)def forward(self, x):x = self.fc(x)return self.activation(x)
    
  • 注意
    • 仅适用于标签互斥且需输出概率分布的特殊场景(如多属性组合分类),绝大多数多标签任务不适用
3. 其他激活函数(非常规选择)
  • Tanh
    • 输出范围为 \((-1, 1)\),可用于需要 “正负相关性” 判断的场景(如标签存在 “正向关联” 或 “负向关联”),但需自定义阈值(如 \(>0\) 判定为正标签)。
    • 较少使用,因为 Sigmoid 更符合概率直觉。
  • Identity(不激活)
    • 直接输出线性结果,配合自定义损失函数(如 BCEWithLogitsLoss,内部包含 Sigmoid)使用,等价于在损失函数中隐式激活。
    • 常见写法

      python

      运行

      class ModelWithImplicitActivation(nn.Module):def __init__(self, input_size, num_labels):super().__init__()self.fc = nn.Linear(input_size, num_labels)  # 无激活函数self.loss_fn = nn.BCEWithLogitsLoss()  # 损失函数内部包含Sigmoiddef forward(self, x, y=None):logits = self.fc(x)if y is not None:return self.loss_fn(logits, y)else:return torch.sigmoid(logits)  # 推理时手动添加Sigmoid获取概率
      

三、总结:激活函数选择逻辑

  1. 首选 Sigmoid:适用于绝大多数多标签分类任务(标签独立、可共存),输出概率直观,配合阈值判断标签是否激活。
  2. 避免 Softmax:除非标签严格互斥(极罕见场景),否则不要使用。
  3. 隐式激活(BCEWithLogitsLoss):训练时通过损失函数间接实现激活,代码更高效,是常用的工程实践。

四、损失函数搭配建议

  • Sigmoid + BCEWithLogitsLoss(推荐):
    • BCEWithLogitsLoss = Sigmoid + 二分类交叉熵,训练时直接输入未激活的 logits,避免梯度消失问题。
  • Sigmoid + BCELoss
    • 需手动对输出进行 Sigmoid 激活,再计算二分类交叉熵,代码稍繁琐,且可能因激活函数导致梯度不稳定。

python

运行

# 推荐写法:隐式激活(BCEWithLogitsLoss)
loss_fn = nn.BCEWithLogitsLoss()  # 内部包含Sigmoid
logits = model(x)  # 输出未激活的logits
loss = loss_fn(logits, y_true)

通过合理选择激活函数和损失函数,可高效解决多标签分类问题。

相关文章:

多标签多分类 用什么函数激活

在多标签多分类任务中,激活函数的选择需要根据任务特性和输出层的设计来决定。以下是常见的激活函数及其适用场景: 一、多标签分类任务的特点 每个样本可以属于多个类别(标签之间非互斥,例如一篇文章可能同时属于 “科技” 和 “…...

day26-计算机网络-4

1. tcp的11种状态 ss -ant -a 表示看所有状态 -n 表示不将ip解析为主机名 -t 表示tcp 1.1. closed状态(客户端、服务端) 客户端发起建立连接前的状态服务端启动服务前的状态 1.2. listen状态(服务端) 服务端软件运行的时候状…...

ngx_stream_geo_module在传输层实现高性能 IP Region 路由

一、模块定位与核心价值 层次:工作在 Stream (TCP/UDP) 层,和 ngx_http_geo_module 的 L7 语义互补。作用:基于客户端 IP 前缀 / 范围生成一个 Nginx 变量,可在后续 proxy_pass、map、limit_conn、access 等指令中使用&#xff0…...

国防科技大学计算机基础慕课课堂学习笔记

1.信息论 香农作为信息论的这个创始人,给出来了这个信息熵的计算方法,为我们现在的这个生活的很多领域奠定了基础,我第一次听说这个信息熵是在这个数学建模里面的理论学习中有关于这个:决策树的模型,在那个问题里面&a…...

【第七篇】 SpringBoot项目的热部署

简介 本文介绍了热部署(Hot Deployment)的概念、使用场景及在IDEA中的配置方法。热部署可在不重启应用的情况下动态更新代码,提升开发效率,适用于调试、微服务架构和自动化测试等场景。文章详细说明了热部署的实现步骤&#xff08…...

解决pycharm同一个文件夹下from *** import***仍显示No module named

1、,from ***import *,同文件夹中已有.py文件但是仍然报错No module named 原因是因为pycharm没有把文件夹设置为根目录,只需要在文件夹的上一级设置为根目录即可,测试过如果仅仅将当前的文件夹设置仍然报错,如果把最上…...

GO 基础语法和数据类型面试题及参考答案(上)

目录 Go 中变量定义方式有哪些?各有什么适用场景? 使用 : 定义变量的限制是什么? 全局变量可以使用 : 声明吗?为什么? Go 中如何声明一个多变量赋值?有哪些注意事项? 常量能否通过表达式赋值…...

使用 Redisson 实现分布式锁—解决方案详解

Redisson 是 Redis 官方推荐的 Java 客户端,提供了一系列分布式服务实现,其中分布式锁是其核心功能之一。本文将深入解析 Redisson 分布式锁的实现原理、高级特性和最佳实践。 一、Redisson 分布式锁的优势 与传统实现的对比 特性手动实现Redisson 实现…...

结合三维基因建模与智能体技术打造工业软件无码平台

通过深度整合 Protocol Buffers (Protobuf)、gRPC 及 Microsoft AI 技术,构建面向智能制造的高性能、智能化 PLM 平台。 一、Protocol Buffers 深度集成 1. 基因模型标准化定义 三维基因容器 Protobuf 规范: protobuf syntax "proto3"; pa…...

Python Day46

Task: 1.不同CNN层的特征图:不同通道的特征图 2.什么是注意力:注意力家族,类似于动物园,都是不同的模块,好不好试了才知道。 3.通道注意力:模型的定义和插入的位置 4.通道注意力后的特征图和热力…...

基于PostGIS的各地级市路网长度统计及Echarts图表可视化实践-以湖南省为例

目录 前言 一、路网长度计算 1、地级市列表查询 2、地级市路网长度查询 二、Echarts可视化实现 1、Echarts后端生成 2、引入Colormap配色 3、前端微调 三、总结 前言 在当今快速发展的社会中,交通路网的建设与布局对于一个地区的经济发展、居民生活以及城市…...

mac版excel如何制作时长版环形图

设置辅助列 创建簇状柱形图 将辅助列绘制在次坐标轴 工作时长在主坐标轴,右键分别更改图表类型为圆环。 辅助列圆环全部为灰色,边框为白色 辅助列设置透明度100% 设置辅助列和工作时长列同样的圆环大小 可得 核心:只要辅助列边框不透明…...

PCB设计教程【大师篇】——STM32开发板原理图设计(电源部分)

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 1. 工程创建与前期…...

k8s4部署

configMap configmap概述:数据会存储在etcd数据库,其应用场景主要在应用程序的配置 configmap支持的类型(1)键值对(2)多行数据 pod使用configmap资源有两种常见的方式(1)变量注入&a…...

贝叶斯医学分析中“先验”的如何进行选择(文献解读)

贝叶斯医学分析中“先验”的如何进行选择(文献解读) 作者:Callum Taylor, Kathryn Puxty, Tara Quasim, Martin Shaw 文章标题:Understanding Bayesian analysis of clinical trials: an overview for clinicians 期刊名称&#x…...

【汇编逆向系列】七、函数调用包含多个参数之浮点型- XMM0-3寄存器

目录 1. 汇编代码 1.1 debug编译 1.2 release编译 2. 汇编分析 2.1 浮点参数传递规则 2.2 栈帧rsp的变化时序 2.3 参数的访问逻辑 2.4 返回值XMM0寄存器 3. 汇编转化 3.1 Debug编译 3.2 Release 编译 3.3 C语言转化 1. 汇编代码 上一节介绍了整型的函数传参&#x…...

【MySQL系列】MySQL 执行 SQL 文件

博客目录 一、MySQL 执行 SQL 文件的常见场景二、MySQL 执行 SQL 文件的主要方法1. 使用 MySQL 命令行客户端2. 在 MySQL 交互界面中使用 source 命令3. 使用 MySQL Workbench 等图形化工具4. 使用编程语言接口 三、执行 SQL 文件时的注意事项1. 字符集问题2. 事务处理3. 错误处…...

论文MR-SVD

每个像素 7 个 FLOPs意思: FLOPs(浮点运算次数):衡量算法计算复杂度的指标,数值越小表示运算越高效。含义:对图像中每个像素进行处理时,仅需执行7 次浮点运算(如加减乘除等&#xf…...

Java 日期时间类全面解析

Java 日期时间类全面解析:从传统到现代的演进 一、发展历程概览 二、传统日期类(Java 8前) 1. java.util.Date - 日期表示类 Date now new Date(); // 当前日期时间 System.out.println(now); // Wed May 15 09:30:45 CST 2023// 特定时间…...

【工具-Wireshark 抓包工具】

工具-Wireshark 抓包工具 ■ Wireshark 抓包工具■ 通过IP指定查看■■ ■ Wireshark 抓包工具 抓包工具】win 10 / win 11:WireShark 下载、安装、使用 Wireshark下载 阿里云镜像 ■ 通过IP指定查看 ■ ■...

Linux安全机制:从SELinux到Intel SGX的堡垒

Linux安全机制:从SELinux到Intel SGX的堡垒 数字世界的钢铁长城 引言:操作系统的"防御工事" 当服务器每天承受数百万次攻击尝试时,Linux内核的安全机制如同精密的防御系统,在纳秒级时间内做出响应。现代Linux安全架构已…...

设备驱动与文件系统:06 目录与文件

磁盘使用的最后一层抽象:文件系统 今天我们讲第31讲,这一讲将完成磁盘对磁盘使用的最后一层抽象。对此板使用最后一层抽象,抽象出来的是什么呢? 实际上我们使用过磁盘,大家应该有这样的认识,最后不管这个磁…...

C++11 Token Bucket (令牌桶)算法的锁无实现及应用

Token Bucket(令牌桶)算法是一种在流量控制和资源分配领域被广泛应用的技术。它通过约束数据传输速率或任务执行频率,确保系统在资源有限的情况下,能够稳定、高效地运行,避免因突发流量或任务积压而导致的性能下降甚至…...

详细介绍uni-app中Composition API和Options API的使用方法

uni-app 中 Composition API 和 Options API 的使用方法详解 一、Options API&#xff08;Vue 2.x 传统方式&#xff09; 1. 基本结构 Options API 通过配置对象的不同选项&#xff08;如 data、methods、computed 等&#xff09;组织代码&#xff1a; <template><…...

delphi7 链表 使用方法

在 Delphi 中&#xff0c;链表是一种常见的数据结构&#xff0c;用于存储一系列的元素&#xff0c;其中每个元素都包含一个指向列表中下一个元素的引用。在 Delphi 7 中&#xff0c;你可以手动实现链表&#xff0c;或者使用一些现有的集合类&#xff0c;例如 TList 或者 TLinke…...

Linux 系统中的算法技巧与性能优化

引言​ Linux 系统以其开源、稳定和高度可定制的特性&#xff0c;在服务器端、嵌入式设备以及开发环境中得到了极为广泛的应用。对于开发者而言&#xff0c;不仅要掌握在 Linux 环境下实现各类算法的方法&#xff0c;更要知晓如何利用系统特性对算法进行优化&#xff0c;以提升…...

【C++系列】模板类型特例化

1. C模板类型特例化介绍 ​​定义​​&#xff1a;模板类型特例化&#xff08;Template Specialization&#xff09;是C中为模板的特定类型提供定制实现的机制&#xff0c;允许开发者对通用模板无法处理的特殊类型进行优化或特殊处理。 ​​产生标准​​&#xff1a; C98/03…...

K8S认证|CKS题库+答案| 7. Dockerfile 检测

目录 7. Dockerfile 检测 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、修改 Dockerfile 3&#xff09;、 修改 deployment.yaml 7. Dockerfile 检测 免费获取并激活 CKA_v1.31_模拟系统 题目 您必须在以…...

JAVA 对象 详解

对象 对象结构&#xff1a; 对象头&#xff08;元数据和指向class的指针&#xff09;、实例数据、对齐填充 数组对象&#xff1a; 对象头&#xff08;元数据和指向class的指针&#xff09;、数组长度、数组数据、对齐填充 对象创建&#xff1a; 一、当Java虚拟机遇到一条…...

MATLAB实战:四旋翼姿态控制仿真方案

以下是一个基于MATLAB/Simulink的四旋翼姿态控制仿真方案。本方案使用简化姿态动力学模型&#xff0c;并设计PID控制器进行稳定控制。 1. 四旋翼姿态动力学模型 核心方程&#xff1a;I * ω̇ ω (I * ω) τ 其中&#xff1a; I diag([Ixx, Iyy, Izz]) 为转动惯量矩阵 …...