使用损失函数评估模型预测

使用 PyTorch 的深度学习入门

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

为何需要损失函数?

  • 告诉我们训练中模型表现如何
  • 接收模型预测 $\hat{y}$ 与真实值 $y$
  • 输出一个浮点数

$$

损失函数示意图

使用 PyTorch 的深度学习入门

为何需要损失函数?

  • 类 0:哺乳,类 1:鸟类,类 2:爬行类
毛发 羽毛 卵生 泌乳 尾巴 家养 体型似猫 类别
1 0 0 1 0 4 0 0 1 0

$$

  • 预测类 = 0 -> 正确 = 低损失
  • 预测类 = 1 -> 错误 = 高损失
  • 预测类 = 2 -> 错误 = 高损失

$$

  • 目标是最小化损失
使用 PyTorch 的深度学习入门

独热编码概念

  • $loss = F(y, \hat{y})$
  • $y$ 为单个整数(类别标签)
    • 例如,当是哺乳类时 $y=0$
  • $\hat{y}$ 为张量(softmax 前的预测)
    • 若 N 为类别数,例如 N = 3
    • $\hat{y}$ 为 N 维张量,
      • 例如 $\hat{y}$ = [-5.2, 4.6, 0.8]
使用 PyTorch 的深度学习入门

独热编码概念

  • 整数 y 转为由 0 和 1 组成的张量

独热编码

使用 PyTorch 的深度学习入门

用独热编码转换标签

import torch.nn.functional as F

print(F.one_hot(torch.tensor(0), num_classes = 3))
tensor([1, 0, 0])
print(F.one_hot(torch.tensor(1), num_classes = 3))
tensor([0, 1, 0])
print(F.one_hot(torch.tensor(2), num_classes = 3))
tensor([0, 0, 1])
使用 PyTorch 的深度学习入门

PyTorch 中的交叉熵损失

from torch.nn import CrossEntropyLoss

scores = torch.tensor([-5.2, 4.6, 0.8])
one_hot_target = torch.tensor([1, 0, 0])

criterion = CrossEntropyLoss()
print(criterion(scores.double(), one_hot_target.double()))

$$

tensor(9.8222, dtype=torch.float64)
使用 PyTorch 的深度学习入门

整合回顾

损失函数输入:

  • scores——最终 softmax 之前的模型预测
  • one_hot_target——独热编码的真实标签

损失函数输出:

  • loss——单个 float

带数值的损失函数示意图

使用 PyTorch 的深度学习入门

Passons à la pratique !

使用 PyTorch 的深度学习入门

Preparing Video For Download...