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 才能算准确率。常用做法是:

剪映
剪映

一款全能易用的桌面端剪辑软件

下载

立即学习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 平均,能看出长尾类表现

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

469

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.12.06

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

469

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.12.06

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

9

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

8

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

3

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

热门下载

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

精品课程

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

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

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

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