Cross-entropy cho phân loại nhiều lớp

Trung bình

AIhàm mất mátsoftmax4 test · 12 giây · sai số 1e-5

Cho logits (n, C) (đầu ra chưa qua softmax) và nhãn đúng labels (n,). Tính cross-entropy trung bình:

L = −(1/n) Σᵢ log softmax(logitsᵢ)[labelsᵢ]

  • Ổn định số: log softmax(z)ₖ = zₖ − logsumexp(z), với logsumexp(z) = max(z) + log Σ e^(z − max(z)). Tính softmax rồi mới lấy log sẽ ra -inf khi logits lớn.

Viết hàm

cross_entropy(logits, labels)

Tham số

  • logits: mảng (n, C)
  • labels: mảng số nguyên (n,)

Trả về

Một số thực ≥ 0.

Ví dụ

Tham số

logits = [[2,1,0.1]]
labels = [0]

Kết quả

0.41703001627783376

≈ 0.417

Tham số

logits = [[1000,0],[0,1000]]
labels = [1,1]

Kết quả

500.0

Mẫu 1 đoán sai rất tự tin → mất mát ≈ 500

Bài tiếp theo: Hồi quy tuyến tính — nghiệm đóng →

Python · NumPy

Bấm “Chạy thử” để gọi cross_entropy() với 2 ví dụ trong đề và so sánh kết quả. Dùng print() thoải mái để gỡ lỗi.