Đề bài
Hàm mất mát biến các sai sót của mô hình thành một con số cần làm nhỏ nhất. Hãy cài đặt compute_loss(kind, predictions, targets) cho ba hàm mất mát phổ biến, với n là số dự đoán:
"mse"(sai số bình phương trung bình): trung bình của (p - t)²"mae"(sai số tuyệt đối trung bình): trung bình của |p - t|"binary_cross_entropy": -trung bình của [t × ln(p) + (1 - t) × ln(1 - p)]. Trước tiên hãy giới hạn mỗi dự đoán p trong khoảng [0.0000001, 0.9999999] để không bao giờ tính ln(0).
Đầu vào
kind: "mse", "mae" hoặc "binary_cross_entropy".
predictions: Các dự đoán của mô hình.
targets: Các giá trị đúng (cùng độ dài). Với cross-entropy, chúng là 0 hoặc 1 và dự đoán nằm trong khoảng 0 đến 1.
Đầu ra
Trả về giá trị mất mát dưới dạng số thực.
Ràng buộc
1 ≤ độ dài ≤ 1.000
-1.000 ≤ mỗi giá trị ≤ 1.000 (với cross-entropy: 0 ≤ p ≤ 1 và t ∈ {0, 1})
Ví dụ
Đầu vào:
kind = "mse"
targets = [3.0, -0.5, 2.0]
predictions = [2.5, 0.0, 2.0]
Kết quả mong đợi:
expected = 0.166667
Đầu vào:
std::string kind = "mse";
std::vector<double> targets = {3.0, -0.5, 2.0};
std::vector<double> predictions = {2.5, 0.0, 2.0};
Kết quả mong đợi:
double expected = 0.166667;
Đầu vào:
string kind = "mse";
double[] targets = new double[] {3.0, -0.5, 2.0};
double[] predictions = new double[] {2.5, 0.0, 2.0};
Kết quả mong đợi:
double expected = 0.166667;
Giải thích
Bình phương sai số: 0.5² = 0.25, 0.5² = 0.25 và 0² = 0. Trung bình là 0.5 / 3 ≈ 0.166667.
Đầu vào:
kind = "binary_cross_entropy"
targets = [1.0, 0.0]
predictions = [0.9, 0.2]
Kết quả mong đợi:
expected = 0.164252
Đầu vào:
std::string kind = "binary_cross_entropy";
std::vector<double> targets = {1.0, 0.0};
std::vector<double> predictions = {0.9, 0.2};
Kết quả mong đợi:
double expected = 0.164252;
Đầu vào:
string kind = "binary_cross_entropy";
double[] targets = new double[] {1.0, 0.0};
double[] predictions = new double[] {0.9, 0.2};
Kết quả mong đợi:
double expected = 0.164252;
Giải thích
-(ln(0.9) + ln(1 - 0.2)) / 2 = -(-0.105361 - 0.223144) / 2 ≈ 0.164252. Dự đoán đúng và tự tin cho giá trị mất mát nhỏ.
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.