深度学习中one-hot 编码的正确理解

发布于:2024-11-02 ⋅ 阅读:(13) ⋅ 点赞:(0)

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 标签使得我们可以利用交叉熵损失等方法来衡量模型的预测性能,从而指导模型的学习和优化。

网站公告

今日签到

点亮在社区的每一天
去签到