python-029Đọc toàn bộ đề miễn phí

Thiết kế Dataclass Bất biến Xác thực Cấu hình Huấn luyện AI

Khi huấn luyện các mô hình AI tại AI Empire Academy, các siêu tham số (Hyperparameters) cần được đảm bảo tính toàn vẹn tuyệt đối: sau khi khởi tạo, không một hàm nào được phép thay…

PythonTrung bình25 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

dataclassesimmutabilitydata validationclean code

Kiến thức tiên quyết: dataclass decorator, post init, type annotations.

Nội dung đề bài

Mục tiêu kiến thức

  • Sử dụng module chuẩn dataclasses với cờ frozen=True để tạo cấu trúc dữ liệu bất biến (Immutable Data Structure).
  • Tùy biến kiểm tra tính hợp lệ của trường dữ liệu thông qua phương thức __post_init__.
  • Hỗ trợ tính toán hash và so sánh bằng tự động để dùng làm khóa trong Cache hoặc Set.

Mô tả bài toán

Khi huấn luyện các mô hình AI tại AI Empire Academy, các siêu tham số (Hyperparameters) cần được đảm bảo tính toàn vẹn tuyệt đối: sau khi khởi tạo, không một hàm nào được phép thay đổi cấu hình làm sai lệch kết quả thí nghiệm (Reproducibility).

Hãy cài đặt lớp @dataclass(frozen=True) có tên TrainingConfig: Các trường dữ liệu:

  • model_name: str
  • learning_rate: float
  • batch_size: int
  • layers: tuple[int, ...]
  • optimizer: str = "adam"
  • weight_decay: float = 0.01

Phương thức __post_init__ phải kiểm tra các quy tắc nghiêm ngặt sau và ném ValueError tương ứng nếu vi phạm:

  • model_name: Sau khi strip(), chuỗi không được rỗng. Nếu rỗng, ném ValueError("model_name khong duoc de trong").
  • learning_rate: Phải thỏa mãn 0 < learning_rate ≤ 1.0. Nếu không, ném ValueError("learning_rate phai thuoc (0, 1]").
  • batch_size: Phải là số nguyên dương và là lũy thừa của 2 (ví dụ 1, 2, 4, 8, 16, 32, 64, 128, ...). Nếu không, ném ValueError("batch_size phai la luy thua cua 2").
  • layers: Phải là tuple có ít nhất 1 phần tử và mọi phần tử đều phải > 0. Nếu không, ném ValueError("layers phai gom cac so nguyen duong").
  • optimizer: Chuyển về chữ thường phải nằm trong tập hợp {"adam", "sgd", "adamw"}. Nếu không, ném ValueError("optimizer khong hop le").
  • weight_decay: Phải ≥ 0.0. Nếu không, ném ValueError("weight_decay khong the am").

Vì frozen=True, bất kỳ hành vi gán lại giá trị cho thuộc tính (ví dụ cfg.learning_rate = 0.01) phải tự động bị từ chối bởi dataclasses.FrozenInstanceError.

Input

  • Các tham số truyền vào hàm/lớp from hoặc dữ liệu đầu vào theo định dạng mô tả.

Output

  • Kết quả trả về của hàm/lớp from hoặc dữ liệu in ra màn hình theo đúng đặc tả.

Ràng buộc

  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.

Ví dụ 1

Input

from(model_name='transformer_base', learning_rate=0.001, batch_size=32, layers=[512, 1024, 512], optimizer='adamw', weight_decay=0.01)

Output

True

Giải thích

Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.

Ví dụ 2

Input

from(model_name='cnn_model', learning_rate=0.001, batch_size=50, layers=[64, 128], optimizer='adam')

Output

True

Giải thích

Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.