0

0

Python深度学习如何训练多标签图像分类模型的关键细节【教程】

舞姬之光

舞姬之光

发布时间:2025-12-15 20:38:02

|

525人浏览过

|

来源于php中文网

原创

多标签图像分类需用二值向量标签、binary_crossentropy损失、sigmoid输出及多标签专用评估指标。标签为shape=(batch_size, num_classes)的0/1张量,损失函数须为binary_crossentropy且输出层用sigmoid,评估宜用Hamming loss、subset accuracy和macro-F1。

python深度学习如何训练多标签图像分类模型的关键细节【教程】

多标签图像分类和单标签不同,一张图可能同时属于多个类别(比如“猫”“室内”“白天”),模型输出不再是单一概率分布,而是每个标签独立的置信度。关键不在换模型,而在数据准备、损失函数、评估方式和预测逻辑这四点上。

标签格式必须是二值向量,不是整数索引

单标签用 [0, 0, 1, 0] 表示第3类;多标签则用 [1, 0, 1, 1] 表示同时属于第0、第2、第3类。输入模型前,标签要转成 shape=(batch_size, num_classes) 的 float32 张量,值只能是 0 或 1。

  • sklearn.preprocessing.MultiLabelBinarizer 处理原始标签列表(如 [['cat','indoor'], ['dog','outdoor']])最稳妥
  • 别用 to_categorical —— 它只适合单标签,会把多标签错误展开成稀疏独热码
  • 验证时打印几个样本的 label.sum(axis=1),确保结果可以大于 1(说明允许多个 1)

损失函数要用 binary_crossentropy,不是 categorical_crossentropy

因为每个标签是独立的二分类任务,不是互斥的多选一。Keras 中直接指定 loss='binary_crossentropy' 即可,但要注意:

  • 最后一层激活必须是 sigmoid(输出 0~1 概率),不能用 softmax
  • 如果手动写 loss,确保用 tf.keras.losses.BinaryCrossentropy(from_logits=False)
  • 别在标签里做归一化或除以总和——那会破坏二值语义

预测后需设定统一阈值,再按需调整

模型输出是每个类的概率值(如 [0.82, 0.15, 0.93, 0.67]),需转成 0/1 才能算准确率。常用做法是:

快转字幕
快转字幕

新一代 AI 字幕工作站,为创作者提供字幕制作、学习资源、会议记录、字幕制作等场景,一键为您的视频生成精准的字幕。

下载

立即学习Python免费学习笔记(深入)”;

  • 初始统一用 threshold=0.5:大于即判定存在
  • 若某类样本极少(如“金毛犬”只占 0.3%),可单独调低该类阈值(用 per-class threshold)
  • 更稳的方式是用 validation set 跑 grid search,在 F1-score 或 hamming loss 上找最优全局阈值

评估指标不能只看 accuracy,得用多标签专用指标

accuracy 在多标签中意义不大(全错一个也算整体错),推荐组合使用:

  • Hamming loss:错误标签占总标签数的比例,越低越好(sklearn.metrics.hamming_loss)
  • Exact match ratio (subset accuracy):整张图所有标签全对才算对,非常严格(sklearn.metrics.accuracy_score,需加 normalize=True)
  • Per-class F1:分别算每个类的 precision/recall/F1,再 macro 平均,能看出长尾类表现

基本上就这些。不复杂但容易忽略——尤其标签格式和损失函数配错,模型会训得“看起来收敛”实则学不会多标签逻辑。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

772

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

765

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

679

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1385

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

570

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

730

2023.08.11

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 15.3万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号