one-hot编码 是一种表示类别标签的方法。对于一个分类问题(例如图像分割中的类别标签),one-hot编码会将一个类别标记转换为一个向量,这个向量中只有一个位置为1,其余位置为0。
划重点:一个one hot 编码可以理解为是对ground truth的向量化。它可以有很多维,但是只有一个位置是1,其余的位置全都是0。
例子:
1. 分类任务的例子
假设我们在进行水果分类任务,目标是将图像分为三类:苹果(类别0)、香蕉(类别1)和橙子(类别2)。
- 真实标签:
- 图像1:苹果(类别0)
- 图像2:香蕉(类别1)
- 图像3:橙子(类别2)
将这些标签转化为 one-hot 编码:
图像 | 真实标签(ground truth) | One-hot 编码 |
图片1 | 0 | [1,0,0] |
图片2 | 1 | [0,1,0] |
图片3 | 2 | [0,0,1] |
假设模型的输出概率如下:
图像 | 模型输出概率 |
图片1 | [0.8,0.1,0.1] |
图片2 | [0.2,0.7,0.1] |
图片3 | [0.1,0.3,0.6] |
对图像1的损失计算如下:
对图像2的损失计算如下:
同理,对图像3的损失计算如下:
整个任务的总损失则为所有图像损失的平均值。
2. 分割任务的例子
现在我们来看一个医学图像分割的例子。目标是将一张包含心脏的图像分割为两类:背景(类别0)和心脏(类别1)。
- 真实标签(简化为一维):
真实标签: [0, 1, 1, 0, 1, 0]
对应的 one-hot 编码为:
one-hot标签:
[
[1, 0], # 背景
[0, 1], # 心脏
[0, 1], # 心脏
[1, 0], # 背景
[0, 1], # 心脏
[1, 0] # 背景
]
模型输出概率
假设模型的输出概率如下:
模型输出的概率:
[
[0.7, 0.3], # 背景: 70%,心脏: 30%
[0.2, 0.8], # 背景: 20%,心脏: 80%
[0.1, 0.9], # 背景: 10%,心脏: 90%
[0.6, 0.4], # 背景: 60%,心脏: 40%
[0.4, 0.6], # 背景: 40%,心脏: 60%
[0.9, 0.1] # 背景: 90%,心脏: 10%
]
损失函数计算
对于每个像素,我们可以计算交叉熵损失。
对于第一个像素:
- 真实标签: [1,0][1, 0][1,0]
- 预测概率: [0.7,0.3][0.7, 0.3][0.7,0.3]
损失计算如下:
对于第二个像素:
- 真实标签: [0,1][0, 1][0,1]
- 预测概率: [0.2,0.8][0.2, 0.8][0.2,0.8]
损失计算如下:
最终,整体损失为所有像素损失的平均值。
四、总结
- One-hot 编码 是将类别标签转化为向量的有效方法,确保模型理解类别之间的独立性。
- 通过具体的分类和分割任务的实例,我们看到 one-hot 编码如何帮助我们表示真实标签。
- 结合概率输出,one-hot 标签使得我们可以利用交叉熵损失等方法来衡量模型的预测性能,从而指导模型的学习和优化。