用損失函式評估模型預測

使用 PyTorch 的深度學習入門

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

為什麼需要損失函式?

  • 訓練時告訴我們模型表現
  • 接收模型預測 $\hat{y}$ 與真實值 $y$
  • 輸出一個浮點數

$$

損失函式示意圖

使用 PyTorch 的深度學習入門

為什麼需要損失函式?

  • 類別 0 - 哺乳類,類別 1 - 鳥類,類別 2 - 爬蟲類
Hair Feathers Eggs Milk Fins Legs Tail Domestic Catsize Class
1 0 0 1 0 4 0 0 1 0

$$

  • 預測類別 = 0 -> 正確 = 低損失
  • 預測類別 = 1 -> 錯誤 = 高損失
  • 預測類別 = 2 -> 錯誤 = 高損失

$$

  • 目標是最小化損失
使用 PyTorch 的深度學習入門

One-hot 編碼概念

  • $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 的深度學習入門

One-hot 編碼概念

  • 整數 y 轉成由 0、1 組成的張量

One-hot 編碼

使用 PyTorch 的深度學習入門

用 One-hot 編碼轉換標籤

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 - one-hot 編碼的真實標籤

損失函式的輸出:

  • loss - 一個浮點數

帶數值的損失函式圖

使用 PyTorch 的深度學習入門

一起來練習吧!

使用 PyTorch 的深度學習入門

Preparing Video For Download...