手语识别损失函数

当前手语识别训练用的是多分类交叉熵损失函数:

python 复制代码
criterion = nn.CrossEntropyLoss()

位置在:

train_sign.py

训练时是这样算的:

python 复制代码
logits = model(keypoints, valid_mask)
loss = criterion(logits, labels)

也就是:

text 复制代码
模型输出 logits: [B, 500]
真实标签 labels: [B]
交叉熵损失 loss

为什么用 CrossEntropyLoss

你的任务是:

text 复制代码
CSL2018 500 类孤立手语识别

每个样本只属于一个类别,比如:

text 复制代码
label = 0
label = 128
label = 499

这是标准的单标签多分类任务,所以用交叉熵是合理的。

logits 是什么

模型最后输出:

text 复制代码
[B, 500]

例如一个 batch 有 32 个样本:

text 复制代码
[32, 500]

每一行是一个样本对 500 个手语类别的原始分数:

text 复制代码
[类别0分数, 类别1分数, ..., 类别499分数]

注意这里不是概率,还没经过 softmax。

CrossEntropyLoss 内部会自动做:

text 复制代码
softmax + negative log likelihood

所以代码里不需要手动写 softmax。

labels 是什么

labels 形状是:

text 复制代码
[B]

例如:

python 复制代码
labels = [0, 12, 88, 499]

表示每个样本的真实类别编号。

损失函数想让模型学什么

交叉熵的目标是:

text 复制代码
让真实类别的预测分数尽量高
让其他类别的预测分数尽量低

例如某个样本真实类别是 128,模型输出 500 个类别分数,交叉熵会推动:

text 复制代码
第 128 类分数升高
其他类别分数降低

你的训练输出里的 loss 是什么

例如:

text 复制代码
train_loss=0.2942
val_loss=0.8619

含义是:

text 复制代码
train_loss:训练集平均交叉熵损失
val_loss:验证集平均交叉熵损失

一般来说:

text 复制代码
loss 越低越好
top1 越高越好

但论文里通常主要报告:

text 复制代码
Top-1 Accuracy
Top-5 Accuracy

loss 更多用于观察训练是否收敛、是否过拟合。

当前损失函数有没有改进空间

有。现在是最基础的:

python 复制代码
nn.CrossEntropyLoss()

后续可以考虑:

python 复制代码
nn.CrossEntropyLoss(label_smoothing=0.1)

也就是 label smoothing,标签平滑。

它的作用是缓解模型过度自信,对你这种 500 类任务可能有帮助,尤其你之前出现过:

text 复制代码
train_top1 很高
val_top1 明显低一些

说明有一定过拟合。

不过现在论文实验建议先保持基础交叉熵作为主设置,后续可以把 label smoothing 作为优化实验或正则化实验。

Label Smoothing Cross Entropy 本质上是在防止模型对训练标签过度自信。

普通交叉熵里,标签是 one-hot:

text 复制代码
真实类别 = 3

目标分布:
类别0: 0
类别1: 0
类别2: 0
类别3: 1
类别4: 0

也就是说,模型被要求把真实类别概率推到 1.0,其他类别全部推到 0.0。

但在手语识别里,很多类别动作很像,关键点也可能有噪声。如果模型被迫对训练样本"绝对自信",就容易记住训练集细节,验证集泛化变差。

Label Smoothing 会把硬标签变软。比如 label_smoothing=0.1,500 类任务里大概变成:

text 复制代码
真实类别: 0.9 左右
其他类别: 分到很小的一点概率

它表达的意思是:

text 复制代码
这个样本主要属于正确类别,但不要认为其他类别概率必须绝对为 0。

对你的项目来说,它主要解决三个问题:

  1. 缓解过拟合

    你之前 FULL 模型训练集 top1 到 98% 左右,验证集停在 82% 左右,说明模型已经很会记训练集了。Label smoothing 会降低这种"死记硬背"。

  2. 降低模型过度自信

    普通 CE 容易让 logits 拉得很大,模型输出非常尖锐。Label smoothing 会让输出分布更平滑。

  3. 适合细粒度相似类别

    手语类别之间可能只有手形、方向、轨迹的一点差异。软标签允许模型保留一点不确定性,更符合这个任务特性。

一句话概括:

普通 Cross Entropy 是"必须百分百相信这个标签";Label Smoothing Cross Entropy 是"相信这个标签,但别过度自信"。

论文里可以这样写:

为缓解孤立手语类别间细粒度相似性和关键点噪声导致的过拟合问题,本文在交叉熵损失中引入标签平滑策略,将硬标签分布转化为软标签分布,从而抑制模型对训练样本的过度置信,提高模型泛化能力。

相关推荐
七牛开发者6 小时前
从 GLM 到 GPT,HarnessPro 如何用 RSI 降低 Agent 成本
人工智能·gpt·agent·harness·rsi
跨境卫士-小汪6 小时前
TikTokShop欧洲商品接口架构调整跨境技术团队需要做好哪些准备
大数据·人工智能·新媒体运营·跨境电商·跨境·营销策略
康小汪7 小时前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
前端·vue.js·人工智能·ai编程·最佳实践
收放扳机8 小时前
多机连线(In-Line)场景下,收放板机“缓存工位”的容量与架构选型参考
人工智能·科技·自动化·制造·pcb工艺
武天旭8 小时前
AI安全--AI大模型的后门攻击检测与防御
人工智能·深度学习·安全·机器学习
智能运维指南8 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
人工智能AI技术8 小时前
DeepInfer开源炸场!别再妄想个人电脑跑满血DeepSeek
人工智能
深蓝电商API8 小时前
用AI生成拟人行为:让鼠标轨迹更“有人味”
人工智能·爬虫
znnnk8 小时前
数据库被AI“重写”:2026,从CPU中心走向GPU中心
数据库·人工智能·oracle
深蓝AI8 小时前
网站正在对 AI Agent 集体关门:亚马逊封锁 Muse、银行拒绝登录,开发者怎么活下去
人工智能