LOSS Diagram
Text Only
================================================================================
SƠ ĐỒ TÍNH TOÁN LOSS & ACCURACY (QUY TRÌNH MA TRẬN)
================================================================================
(ĐẦU VÀO)
+---------------------------------+ +---------------------+
| softmax_outputs (ŷ) | | class_targets (y) |
| (Ma trận dự đoán N x C) | | (Nhãn thật) |
| [[0.7, 0.2, 0.1], | | [0, 1, 1] | <-- Dạng Sparse
| [0.5, 0.1, 0.4], | | HOẶC |
| [0.02, 0.9, 0.08]] | | [[1, 0, 0], |
+---------------------------------+ | [0, 1, 0], | <-- Dạng One-Hot
| [0, 1, 0]] |
+---------------------+
|
v
+-------------------------------------------------------------------------------+
| LUỒNG 1: TÍNH TOÁN MẤT MÁT (LOSS) |
+-------------------------------------------------------------------------------+
|
v
(HÀNH ĐỘNG: Clipping để tránh log(0))
np.clip(y_pred, 1e-7, 1-1e-7)
|
v
+-------------------------------+
| y_pred_clipped |
| [[0.7, 0.2, 0.1], |
| [0.5, 0.1, 0.4], |
| [0.02, 0.9, 0.08]] |
+-------------------------------+
|
+-------------------------+-------------------------+
| |
v (NẾU NHÃN LÀ SPARSE) v (NẾU NHÃN LÀ ONE-HOT)
+------------------------------------+ +--------------------------------------+
| Lấy giá trị theo chỉ số (Indexing) | | Nhân theo phần tử (Element-wise) |
| y_pred[range(N), y_true] | | y_pred_clipped * y_true |
| | | |
| [0.7, 0.2, 0.1] ---<--- [0] | | [[0.7, 0.2, 0.1], * [[1, 0, 0], |
| [0.5, 0.1, 0.4] -------<--- [1] | | [0.5, 0.1, 0.4], [0, 1, 0], |
| [0.02, 0.9, 0.08] -----^---<--- [1] | | [0.02, 0.9, 0.08]] [0, 1, 0]] |
| | | | = |
| v | | [[0.7, 0.0, 0.0], |
| (Vector xác suất đúng) | | [0.0, 0.1, 0.0], |
| [0.7, 0.5, 0.9] | | [0.0, 0.9, 0.0]] |
+------------------------------------+ | | |
| v (np.sum(axis=1)) |
+--------------------------------------+
| |
+----------->-------------+
|
v
+--------------------------+
| correct_confidences |
| (Vector xác suất đúng) |
| [0.7, 0.5, 0.9] |
+--------------------------+
|
v (HÀNH ĐỘNG: Lấy Negative Log)
-np.log()
|
v
+--------------------------+
| sample_losses |
| [0.356, 0.693, 0.105] |
+--------------------------+
|
v (HÀNH ĐỘNG: Lấy trung bình)
np.mean()
|
v
+-----------------------+
| average_loss |
| (Một số vô hướng) |
| 0.385 |
+-----------------------+
+-------------------------------------------------------------------------------+
| LUỒNG 2: TÍNH TOÁN ĐỘ CHÍNH XÁC (ACCURACY) - ĐÃ SỬA LỖI |
+-------------------------------------------------------------------------------+
|
(Sử dụng `softmax_outputs` GỐC) |
+---------------------------------+ | +---------------------------------------+
| softmax_outputs (ŷ) | | | class_targets (y) |
| [[0.7, 0.2, 0.1], | | | |
| [0.5, 0.1, 0.4], | | | Nếu là One-Hot: |
| [0.02, 0.9, 0.08]] | | | [[1,0,0], [0,1,0], [0,1,0]] |
+---------------------------------+ | | | |
| | | v np.argmax(axis=1) |
v np.argmax(axis=1) | | |
| | | Nếu là Sparse (không cần làm gì): |
+----------------+ | | [0, 1, 1] |
| predictions | | +-----------------|---------------------+
| [0, 0, 1] | | |
+----------------+ +-----------><-------+
| |
+---------------><-------------+
|
v (HÀNH ĐỘNG: So sánh bằng nhau)
predictions == y
|
v
+----------------------------+
| [0, 0, 1] == [0, 1, 1] |
+----------------------------+
|
v
+----------------------------+
| [True, False, True] |
+----------------------------+
|
v (HÀNH ĐỘNG: Lấy trung bình, True=1, False=0)
np.mean()
|
v
+-----------------------+
| accuracy |
| (Một số vô hướng) |
| 0.666666... |
+-----------------------+
================================================================================
KẾT QUẢ CUỐI CÙNG
+------------------+ +------------------+
| average_loss | | accuracy |
| 0.385 | | 0.666666... |
+------------------+ +------------------+
================================================================================