Học sâu ứng dụng University

Chủ đề 5: Tổ chức mã nguồn với PyTorch Lightning

100 questions
150 min
Answer key

Exam info

Subject
Học sâu ứng dụng
Exam type
University
Questions
100
Duration
150 min
Answers
✓ With explanations

Questions (100)

  1. Q 1.

    Vai trò đúng nhất của PyTorch Lightning trong học phần này là gì?

    • A.

      Một framework mới thay thế hoàn toàn PyTorch.

    • B.

      Thư viện giúp tổ chức mã nguồn PyTorch, tự động hóa nhiều thao tác kỹ thuật trong huấn luyện.

    • C.

      Một hộp đen tự xây mô hình, hàm mất mát, bộ tối ưu và chỉ số cho người dùng.

    • D.

      Một gói bắt buộc phải dùng đồng thời Trainer, LightningModule, LightningDataModule và TorchMetrics.

  2. Q 2.

    Trong cách tổ chức mã nguồn được đề xuất, ba loại mã được đặt ở đâu?

    • A.

      Mã khoa học trong LightningModule, mã kỹ thuật trong Trainer và mã dữ liệu trong LightningDataModule.

    • B.

      Mã khoa học trong Trainer, mã kỹ thuật trong LightningModule và mã dữ liệu trong callback.

    • C.

      Mã khoa học và mã kỹ thuật đều trong LightningModule, còn mã dữ liệu trong Trainer.

    • D.

      Tất cả ba loại mã đều đặt trong một hàm huấn luyện duy nhất.

  3. Q 3.

    Đoạn tính loss phân loại bằng F.cross_entropy(logits, labels) thuộc khối nào?

    • A.

      LightningDataModule.

    • B.

      Callback.

    • C.

      LightningModule.

    • D.

      Trainer.

  4. Q 4.

    Phần nào chịu trách nhiệm chuyển mô hình và dữ liệu sang GPU, quản lý backward và cập nhật tham số?

    • A.

      LightningDataModule.

    • B.

      LightningModule.

    • C.

      Trainer.

    • D.

      Logger.

  5. Q 5.

    Thành phần nào phù hợp nhất để đóng gói việc tải MNIST, chia tập và tạo DataLoader?

    • A.

      LightningDataModule.

    • B.

      Trainer.

    • C.

      ModelCheckpoint.

    • D.

      LearningRateMonitor.

  6. Q 6.

    Mối quan hệ nào giữa Lightning và PyTorch là chính xác?

    • A.

      Lightning thay đổi cách viết mô hình thành một lớp hoàn toàn khác PyTorch.

    • B.

      Lightning hoạt động trên nền tảng PyTorch và giảm bớt mã kỹ thuật lặp lại.

    • C.

      PyTorch chỉ được dùng để tạo dữ liệu, còn Lightning tự xây mọi mô hình.

    • D.

      Lightning chỉ hỗ trợ phân loại ảnh và không dùng được cho hồi quy.

  7. Q 7.

    Sau khi huấn luyện bằng Lightning, mô hình có thể được sử dụng như thế nào trong ứng dụng PyTorch thông thường?

    • A.

      Phải chuyển mọi mô hình thành một định dạng đặc biệt chỉ Lightning đọc được.

    • B.

      Có thể lấy state_dict, nạp vào nn.Module tương ứng và suy luận mà không cần Lightning trong ứng dụng.

    • C.

      Chỉ có thể dùng checkpoint Lightning để chạy trên GPU.

    • D.

      Phải dùng lại toàn bộ Trainer trong mọi lần suy luận.

  8. Q 8.

    Để tránh lỗi không tương thích kiểu dữ liệu, cách sử dụng các gói Lightning nào là phù hợp?

    • A.

      Dùng lightning cho Trainer nhưng trộn callback của pytorch_lightning.

    • B.

      Chỉ dùng pytorch_lightning trong toàn bộ chương trình.

    • C.

      Dùng thống nhất gói lightning, ví dụ import lightning as L.

    • D.

      Chọn gói Lightning theo từng tệp trong cùng một dự án.

  9. Q 9.

    Hai phương thức tối thiểu được xem là bắt buộc để một LightningModule có thể được Trainer sử dụng là gì?

    • A.

      forward và validation_step.

    • B.

      training_step và configure_optimizers.

    • C.

      test_step và predict_step.

    • D.

      setup và teardown.

  10. Q 10.

    Vai trò chính của phương thức forward trong LightningModule là gì?

    • A.

      Ghi tất cả chỉ số huấn luyện vào logger.

    • B.

      Định nghĩa phép tính từ đầu vào của mô hình sang đầu ra, chẳng hạn từ đặc trưng sang logits.

    • C.

      Tạo bộ tối ưu và lịch trình tốc độ học.

    • D.

      Chia dữ liệu thành tập huấn luyện và tập kiểm định.

  11. Q 11.

    Điều gì xảy ra nếu training_step tính loss nhưng không trả về loss?

    • A.

      Trainer vẫn tự suy ra loss từ logits.

    • B.

      Trainer bỏ qua lô đó, nên mô hình không học và lỗi có thể không được báo rõ.

    • C.

      Mô hình tự tính lại loss bằng cross entropy.

    • D.

      Chỉ chỉ số độ chính xác bị ảnh hưởng nhưng trọng số vẫn được cập nhật.

  12. Q 12.

    Khi chạy trainer.test(...), Trainer chủ yếu gọi phương thức nào của LightningModule?

    • A.

      training_step.

    • B.

      test_step.

    • C.

      configure_optimizers.

    • D.

      prepare_data.

  13. Q 13.

    Lợi ích chính của mẫu thiết kế bọc một nn.Module bên trong LightningModule là gì?

    • A.

      Không thể thay đổi kiến trúc mô hình sau khi đã tạo LightningModule.

    • B.

      Giúp phần loss, tối ưu và chỉ số được tái sử dụng cho MLP, CNN hoặc kiến trúc khác.

    • C.

      Loại bỏ nhu cầu sử dụng optimizer.

    • D.

      Buộc mô hình phải dùng cùng một loại DataLoader.

  14. Q 14.

    Điều nào được Trainer tự động thực hiện trong quá trình huấn luyện và kiểm định?

    • A.

      Chuyển đổi mô hình giữa chế độ huấn luyện và chế độ đánh giá.

    • B.

      Chọn kiến trúc mạng phù hợp với dữ liệu.

    • C.

      Xác định hàm mất mát theo loại bài toán.

    • D.

      Tạo tập kiểm định từ tập huấn luyện.

  15. Q 15.

    Khi dùng Trainer, việc chuyển mô hình và từng lô dữ liệu sang thiết bị được xử lý như thế nào?

    • A.

      Người dùng vẫn phải gọi .to(device) ở mọi vòng lặp.

    • B.

      Trainer tự chuyển mô hình và lô dữ liệu sang thiết bị đã chọn.

    • C.

      Chỉ mô hình được chuyển sang GPU, còn dữ liệu luôn nằm trên CPU.

    • D.

      DataModule phải chuyển dữ liệu sang GPU trước khi Trainer bắt đầu.

  16. Q 16.

    Với cơ chế tối ưu tự động mặc định, Trainer sử dụng loss trả về từ training_step để làm gì?

    • A.

      Gọi backward và cập nhật tham số theo optimizer.

    • B.

      Chỉ dùng loss để in ra bảng tóm tắt.

    • C.

      Tự động thay đổi tốc độ học sau mỗi lô.

    • D.

      Chuyển loss thành nhãn dự đoán.

  17. Q 17.

    Bộ tối ưu SGD với tốc độ học 0,05 nên được khai báo ở đâu?

    • A.

      Trong configure_optimizers của LightningModule.

    • B.

      Trong prepare_data của LightningDataModule.

    • C.

      Trong phương thức on_train_end của callback.

    • D.

      Trong hàm khởi tạo DataLoader.

  18. Q 18.

    Với cấu trúc LightningModule chuẩn, kiểm định trên tập kiểm định thường được thực hiện khi nào?

    • A.

      Sau mỗi epoch huấn luyện.

    • B.

      Trước khi mô hình được khởi tạo.

    • C.

      Chỉ một lần sau khi huấn luyện kết thúc.

    • D.

      Sau mỗi lô trong tập kiểm tra.

  19. Q 19.

    So với vòng lặp PyTorch thuần, cơ chế lưu checkpoint của Trainer có đặc điểm nào?

    • A.

      Chỉ lưu trọng số cuối cùng sau khi toàn bộ huấn luyện kết thúc.

    • B.

      Được tích hợp trong quy trình huấn luyện và có thể cấu hình bằng ModelCheckpoint.

    • C.

      Bắt buộc lưu toàn bộ đối tượng DataModule vào mỗi checkpoint.

    • D.

      Chỉ hoạt động sau khi người dùng gọi torch.save.

  20. Q 20.

    Tham số max_epochs=10 của Trainer có ý nghĩa gì?

    • A.

      Chỉ lưu tối đa 10 checkpoint.

    • B.

      Giới hạn số epoch huấn luyện tối đa là 10 nếu quá trình chưa dừng sớm.

    • C.

      Giới hạn mỗi epoch chỉ gồm 10 lô.

    • D.

      Ghi nhật ký chỉ trong 10 bước đầu tiên.

  21. Q 21.

    Khi đặt accelerator='auto', Trainer sẽ hành động như thế nào?

    • A.

      Chỉ dùng CPU để bảo đảm kết quả giống nhau trên mọi máy.

    • B.

      Tự chọn GPU nếu có, nếu không thì dùng CPU.

    • C.

      Chỉ chạy trên MPS và báo lỗi nếu máy không có MPS.

    • D.

      Tự chọn nhiều GPU ngay cả khi Trainer chỉ cấu hình một thiết bị.

  22. Q 22.

    Với devices=1, Trainer sử dụng bao nhiêu thiết bị huấn luyện?

    • A.

      Một thiết bị.

    • B.

      Tự động dùng toàn bộ GPU có sẵn.

    • C.

      Mười thiết bị.

    • D.

      Không thiết bị nào nếu đang dùng GPU.

  23. Q 23.

    Cấu hình precision='16-mixed' thường mang lại lợi ích gì?

    • A.

      Tăng tốc huấn luyện trên GPU nhờ sử dụng phép tính số thực hỗn hợp độ chính xác 16 và 32 bit.

    • B.

      Bắt buộc tăng số epoch tối đa lên 16.

    • C.

      Thay đổi số lớp đầu ra của mô hình thành 16.

    • D.

      Loại bỏ nhu cầu cấu hình optimizer.

  24. Q 24.

    Ý nghĩa của deterministic=True trong Trainer là gì?

    • A.

      Buộc PyTorch chỉ dùng các thuật toán có thể tái lập tất định và báo lỗi nếu gặp thuật toán không phù hợp.

    • B.

      Không cho phép sử dụng GPU.

    • C.

      Đảm bảo mọi phiên bản PyTorch trên mọi phần cứng cho kết quả giống hệt nhau.

    • D.

      Tự động lưu checkpoint tốt nhất theo val_loss.

  25. Q 25.

    Tham số default_root_dir của Trainer chủ yếu xác định điều gì?

    • A.

      Kiến trúc mạng nền của mô hình.

    • B.

      Thư mục gốc dùng để lưu nhật ký và checkpoint.

    • C.

      Nơi chứa tập kiểm tra.

    • D.

      Số lượng worker của DataLoader.

  26. Q 26.

    Vai trò của tham số logger trong Trainer là gì?

    • A.

      Chọn kiến trúc mô hình.

    • B.

      Cung cấp bộ tối ưu cho mô hình.

    • C.

      Chỉ định cách lưu nhật ký thí nghiệm, chẳng hạn CSVLogger hoặc TensorBoardLogger.

    • D.

      Tạo DataLoader huấn luyện.

  27. Q 27.

    Cấu hình callbacks của Trainer nên có dạng nào?

    • A.

      Một đối tượng callback duy nhất, không có dấu ngoặc vuông.

    • B.

      Một danh sách các đối tượng callback, chẳng hạn [ModelCheckpoint(...)].

    • C.

      Một chuỗi tên callback không có đối tượng Python.

    • D.

      Danh sách tên tệp checkpoint đã lưu.

  28. Q 28.

    Tham số log_every_n_steps=50 quy định điều gì?

    • A.

      Chỉ huấn luyện 50 bước rồi dừng.

    • B.

      Ghi các đại lượng theo bước vào nhật ký khoảng mỗi 50 bước.

    • C.

      Tạo checkpoint mỗi 50 epoch.

    • D.

      Chia dữ liệu thành các lô 50 phần tử.

  29. Q 29.

    fast_dev_run=True thích hợp nhất cho mục đích nào?

    • A.

      Huấn luyện đầy đủ mô hình trong một epoch để tối ưu tốc độ.

    • B.

      Chạy thử trên một lô huấn luyện và một lô kiểm định để phát hiện lỗi mã.

    • C.

      Tải toàn bộ tập kiểm tra về bộ nhớ.

    • D.

      Tự động chọn checkpoint tốt nhất theo tập kiểm tra.

  30. Q 30.

    Khi dùng overfit_batches=1 để gỡ lỗi, hiện tượng nào cho thấy mã huấn luyện còn đáng ngờ?

    • A.

      Loss trên một lô không thể tiến gần về 0 dù mô hình có thể học thuộc lô đó.

    • B.

      Loss giảm về 0 sau vài bước.

    • C.

      Mô hình dùng một lô duy nhất trong mỗi epoch.

    • D.

      Tập kiểm định không được tạo.

  31. Q 31.

    Khi nào toàn bộ vòng lặp epoch và lô được thực hiện trong Lightning?

    • A.

      Trong hàm __init__ của LightningModule.

    • B.

      Khi gọi trainer.fit(model=..., train_dataloaders=..., val_dataloaders=...).

    • C.

      Khi gọi model.forward.

    • D.

      Khi DataLoader được khởi tạo.

  32. Q 32.

    Khi chuyển cùng một mô hình từ CPU sang GPU bằng Lightning, cần sửa phần định nghĩa mô hình như thế nào?

    • A.

      Thêm .to(device) vào forward.

    • B.

      Không cần sửa; chỉ thay đổi cấu hình accelerator hoặc devices của Trainer.

    • C.

      Phải chuyển mọi lớp Linear sang lớp riêng của GPU.

    • D.

      Phải xây lại DataLoader cho từng loại GPU.

  33. Q 33.

    Mục đích của bước sanity check trước khi huấn luyện là gì?

    • A.

      Tìm ra mô hình có độ chính xác cao nhất trên tập kiểm tra.

    • B.

      Chạy thử một phần quy trình để phát hiện sớn lỗi trước khi huấn luyện dài.

    • C.

      Tăng tốc độ học để đạt hiệu suất tốt nhất.

    • D.

      Chống rò rỉ dữ liệu trong quá trình chuẩn hóa.

  34. Q 34.

    Với 55 000 ảnh và kích thước lô 64, không bỏ lô cuối, số lô huấn luyện mỗi epoch là bao nhiêu?

    • A.

      859 lô.

    • B.

      860 lô.

    • C.

      861 lô.

    • D.

      550 lô.

  35. Q 35.

    Khi không dùng drop_last, lô cuối chỉ có 24 ảnh trong trường hợp 55 000 ảnh và lô 64. Lô này có được dùng để cập nhật mô hình không?

    • A.

      Có, nếu không bỏ qua thì nó vẫn là một bước cập nhật hợp lệ.

    • B.

      Không, mọi lô dưới 64 ảnh đều bị Trainer bỏ qua.

    • C.

      Có, nhưng phải chuẩn hóa nhãn theo kích thước lô cố định.

    • D.

      Không, vì loss chỉ được tính trên các lô có đúng 64 ảnh.

  36. Q 36.

    Vì sao kết quả của PyTorch thuần và Lightning có thể lệch nhẹ dù dùng cùng mô hình, dữ liệu và siêu tham số?

    • A.

      Lightning luôn dùng phép tối ưu khác PyTorch.

    • B.

      Khởi tạo trọng số và thứ tự lô có thể khác giữa hai lần chạy nếu chưa kiểm soát ngẫu nhiên.

    • C.

      Lightning không thể dùng cùng một tập dữ liệu với PyTorch thuần.

    • D.

      Trainer luôn bỏ qua các lô cuối khác kích thước.

  37. Q 37.

    Mô hình MLP 784 → 50 → 25 → 10 có tổng số tham số huấn luyện là bao nhiêu?

    • A.

      40 785 tham số.

    • B.

      39 250 tham số.

    • C.

      41 000 tham số.

    • D.

      785 tham số.

  38. Q 38.

    TorchMetrics giải quyết vấn đề gì khi tính chỉ số trên một tập dữ liệu lớn?

    • A.

      Cho phép nạp toàn bộ tập dữ liệu vào bộ nhớ để tính chính xác.

    • B.

      Cập nhật trạng thái gọn qua từng lô, rồi tổng hợp thành chỉ số cuối cùng.

    • C.

      Tự động tạo nhãn giả cho mọi mẫu chưa có nhãn.

    • D.

      Thay thế toàn bộ quá trình huấn luyện mô hình.

  39. Q 39.

    Lời gọi metric.update(predictions, targets) có tác dụng gì?

    • A.

      Cộng dồn trạng thái của metric nhưng không trả về giá trị.

    • B.

      Xóa toàn bộ số liệu trước khi thêm lô mới.

    • C.

      Trả về giá trị cuối cùng trên toàn bộ tập dữ liệu.

    • D.

      Gọi backward cho metric.

  40. Q 40.

    Khác biệt giữa metric.update(...) và metric(predictions, targets) là gì?

    • A.

      Hai lời gọi hoàn toàn giống nhau.

    • B.

      Lời gọi trực tiếp vừa cập nhật trạng thái vừa trả về giá trị của riêng lô hiện tại.

    • C.

      Chỉ lời gọi trực tiếp mới cập nhật trạng thái.

    • D.

      Chỉ lời gọi trực tiếp mới xóa trạng thái.

  41. Q 41.

    Lời gọi metric.compute() trả về giá trị nào?

    • A.

      Giá trị của riêng lô cuối cùng.

    • B.

      Chỉ số được tính trên tất cả dữ liệu đã cập nhật vào metric.

    • C.

      Một giá trị ngẫu nhiên để đánh giá mô hình.

    • D.

      Danh sách tất cả nhãn đã dự đoán.

  42. Q 42.

    Sau khi Lightning đã ghi chỉ số theo epoch, metric.reset() có ý nghĩa gì?

    • A.

      Đưa trạng thái tích lũy của metric về trạng thái ban đầu cho epoch kế tiếp.

    • B.

      Xóa vĩnh viễn metric khỏi LightningModule.

    • C.

      Ghi toàn bộ giá trị metric vào tập kiểm tra.

    • D.

      Tạo lại optimizer của mô hình.

  43. Q 43.

    Đặc điểm nổi bật của dạng hàm torchmetrics.functional.accuracy(...) là gì?

    • A.

      Có trạng thái nội bộ và tự cộng dồn qua nhiều lô.

    • B.

      Tính trực tiếp từ đầu vào được cung cấp, không có trạng thái tích lũy tự động.

    • C.

      Tự động lưu checkpoint của metric.

    • D.

      Bắt buộc nhận dữ liệu dưới dạng DataLoader.

  44. Q 44.

    Hai lô có 64 mẫu với 60 dự đoán đúng và 8 mẫu với 4 dự đoán đúng. Độ chính xác tổng hợp đúng cách là bao nhiêu?

    • A.

      71,88%.

    • B.

      88,89%.

    • C.

      50,00%.

    • D.

      93,75%.

  45. Q 45.

    Vì sao không nên lấy trung bình đơn giản của độ chính xác từng lô?

    • A.

      Vì mỗi lô có thể khác kích thước, nên lô nhỏ sẽ bị tính trọng số ngang với lô lớn.

    • B.

      Vì TorchMetrics không thể cộng dồn qua các lô.

    • C.

      Vì độ chính xác không thể tính trên dữ liệu bị xáo trộn.

    • D.

      Vì trung bình luôn bằng không nếu có một lô sai.

  46. Q 46.

    Vì sao nên dùng các đối tượng metric riêng cho tập huấn luyện, tập kiểm định và tập kiểm tra?

    • A.

      Để mỗi tập có chu kỳ compute và reset độc lập, tránh trộn số liệu.

    • B.

      Để mỗi tập có một kiến trúc mô hình khác nhau.

    • C.

      Để Trainer không cần gọi validation_step.

    • D.

      Để mỗi tập dùng một optimizer khác nhau.

  47. Q 47.

    Cấu hình nào phù hợp để tính độ chính xác phân loại 10 lớp bằng TorchMetrics hiện đại?

    • A.

      torchmetrics.Accuracy(task='multiclass', num_classes=10).

    • B.

      torchmetrics.Accuracy() không có tham số nào.

    • C.

      torchmetrics.MeanSquaredError(task='multiclass', num_classes=10).

    • D.

      torchmetrics.Accuracy(task='binary').

  48. Q 48.

    Khi ghi một đối tượng TorchMetrics bằng self.log, cần làm gì để giá trị được tổng hợp theo epoch?

    • A.

      Đặt on_epoch=True và on_step=False.

    • B.

      Đặt on_epoch=False và on_step=True.

    • C.

      Gọi metric.compute() trước mỗi lô rồi bỏ qua đối tượng metric.

    • D.

      Không cần tùy chọn nào vì mọi metric luôn mặc định theo epoch.

  49. Q 49.

    Khi Lightning ghi một metric có on_epoch=True, chuỗi xử lý điển hình là gì?

    • A.

      Reset trước, update sau mỗi lô và bỏ qua giá trị cuối epoch.

    • B.

      Compute, ghi giá trị tổng hợp rồi reset để chuẩn bị cho lần theo dõi tiếp theo.

    • C.

      Update, backward và step lặp lại trong khối metric.

    • D.

      Ghi từng lô rồi lấy trung bình bằng pandas sau khi huấn luyện.

  50. Q 50.

    Vì sao train_acc được ghi trong quá trình huấn luyện chỉ là ước lượng?

    • A.

      Vì nó tính trên một tập kiểm định riêng chưa được huấn luyện.

    • B.

      Vì các lô đầu được đánh giá bằng trọng số còn yếu, trong khi trọng số thay đổi xuyên suốt epoch.

    • C.

      Vì TorchMetrics không hỗ trợ phân loại đa lớp.

    • D.

      Vì tập huấn luyện không chứa nhãn.

  51. Q 51.

    Cách nào phù hợp nhất để lấy độ chính xác chính xác của mô hình sau huấn luyện trên tập kiểm tra?

    • A.

      Dùng giá trị train_acc được ghi trong epoch cuối.

    • B.

      Gọi trainer.test sau khi mô hình đã huấn luyện xong.

    • C.

      Lấy trung bình các giá trị val_acc của mọi epoch.

    • D.

      Chọn epoch có train_loss nhỏ nhất rồi coi đó là kết quả kiểm tra.

  52. Q 52.

    Chọn bộ chỉ số hợp lý nhất cho từng tình huống sau.

    • A.

      Phân loại cân bằng: Accuracy; phân loại mất cân bằng: F1 hoặc AUROC; hồi quy: MSE, MAE hoặc R2.

    • B.

      Mọi bài toán đều nên dùng MeanSquaredError vì nó đơn giản nhất.

    • C.

      Phân loại mất cân bằng nên chỉ dùng Accuracy vì nó luôn dễ tính.

    • D.

      Hồi quy nên dùng ConfusionMatrix để đo sai số.

  53. Q 53.

    Khi dùng MetricCollection, cách ghi nhiều chỉ số cùng lúc vào nhật ký là gì?

    • A.

      Gọi self.log_dict với bộ chỉ số của MetricCollection.

    • B.

      Gọi self.log riêng cho từng phần tử và bỏ qua MetricCollection.

    • C.

      In từng chỉ số bằng print trong mỗi lô.

    • D.

      Chuyển MetricCollection thành optimizer.

  54. Q 54.

    Lệnh L.seed_everything(123, workers=True) có tác dụng chính là gì?

    • A.

      Cố định các nguồn ngẫu nhiên của Python, NumPy và PyTorch, đồng thời cố định hạt giống cho worker.

    • B.

      Chỉ cố định cách chia tập kiểm định.

    • C.

      Buộc mọi phép toán GPU trở thành tất định.

    • D.

      Ngăn Trainer tạo thêm epoch.

  55. Q 55.

    Hạt giống ngẫu nhiên nên được đặt ở thời điểm nào?

    • A.

      Sau khi mô hình đã được khởi tạo.

    • B.

      Trước khi tạo dữ liệu, DataLoader và mô hình.

    • C.

      Sau khi toàn bộ huấn luyện kết thúc.

    • D.

      Chỉ ngay trước lệnh in kết quả.

  56. Q 56.

    Vì sao nên truyền generator=torch.Generator().manual_seed(42) cho random_split?

    • A.

      Để cách chia tập không phụ thuộc vào việc thay đổi hạt giống toàn cục cho trọng số hoặc xáo trộn lô.

    • B.

      Để DataLoader tự tạo thêm một tập kiểm tra.

    • C.

      Để mô hình không dùng Dropout.

    • D.

      Để tăng tốc độ tải dữ liệu.

  57. Q 57.

    Nếu đổi hạt giống riêng của random_split từ 42 sang 99, điều gì thay đổi?

    • A.

      Cách chia tập thay đổi, trong khi hạt giống toàn cục cho trọng số và xáo trộn lô vẫn có thể giữ nguyên.

    • B.

      Mọi trọng số mô hình bắt buộc thay đổi.

    • C.

      Tốc độ học mặc định thay đổi.

    • D.

      Kiến trúc mô hình không còn hợp lệ.

  58. Q 58.

    Điều gì cần làm để hạn chế phép toán không tất định trên GPU?

    • A.

      Chỉ tăng số lượng checkpoint.

    • B.

      Dùng deterministic=True và cấu hình môi trường CUDA phù hợp khi cần.

    • C.

      Tắt hoàn toàn logger.

    • D.

      Dùng cùng một kiến trúc mạng cho mọi bài toán.

  59. Q 59.

    Khi nào cần đặt CUBLAS_WORKSPACE_CONFIG để hỗ trợ tái lập trên GPU?

    • A.

      Sau khi checkpoint đã được nạp.

    • B.

      Trước lần sử dụng GPU đầu tiên trong chương trình.

    • C.

      Chỉ sau khi kết quả đã không tái lập.

    • D.

      Không bao giờ cần thiết vì deterministic=True đã đủ trong mọi trường hợp.

  60. Q 60.

    Nguồn ngẫu nhiên nào liên quan trực tiếp đến thứ tự phép toán không cố định trên GPU?

    • A.

      Khởi tạo trọng số của Linear.

    • B.

      Cộng số thực theo thứ tự song song không cố định trên GPU.

    • C.

      Chia tập bằng random_split.

    • D.

      Tải tệp dữ liệu MNIST xuống đĩa.

  61. Q 61.

    Vì sao kết quả tái lập được chỉ là có điều kiện?

    • A.

      Vì mọi mô hình đều có tính ngẫu nhiên không thể loại bỏ hoàn toàn.

    • B.

      Vì CPU, GPU, phiên bản PyTorch hoặc Lightning khác nhau có thể tạo sai số hoặc thuật toán khác nhau.

    • C.

      Vì hàm loss luôn có thành phần ngẫu nhiên ẩn.

    • D.

      Vì DataLoader không thể dùng hạt giống.

  62. Q 62.

    Hàm nào phù hợp để kiểm chứng hai mô hình có tham số giống hệt từng bit?

    • A.

      torch.equal(a, b) trên từng cặp tham số.

    • B.

      a == b rồi chỉ kiểm tra tensor đầu tiên.

    • C.

      So sánh hai giá trị loss in trên cùng một dòng.

    • D.

      So sánh tên các tệp checkpoint.

  63. Q 63.

    Khi hai lần chạy dùng cùng hạt giống, cùng môi trường và cấu hình tất định, kết quả mong đợi là gì?

    • A.

      Các tham số và đường cong học có thể được tái tạo giống hệt.

    • B.

      Chỉ loss cuối cùng chắc chắn giống nhau, còn trọng số có thể khác.

    • C.

      Kết quả luôn khác nhau vì GPU luôn ngẫu nhiên.

    • D.

      Thứ tự lô không ảnh hưởng đến kết quả.

  64. Q 64.

    Trong LightningDataModule, prepare_data() nên thực hiện công việc nào?

    • A.

      Tải hoặc ghi dữ liệu thô ra đĩa mà không gán trạng thái dữ liệu cho đối tượng.

    • B.

      Chia tập và gán self.mnist_train trên mọi GPU.

    • C.

      Tính loss trên tập huấn luyện.

    • D.

      Lưu checkpoint tốt nhất theo val_acc.

  65. Q 65.

    Trong LightningDataModule, setup(stage) nên làm gì?

    • A.

      Đọc dữ liệu, tiền xử lý, chia tập và gán các thành phần cần thiết vào đối tượng.

    • B.

      Chỉ tải tệp dữ liệu từ Internet.

    • C.

      Khởi tạo trọng số mô hình.

    • D.

      Tối ưu siêu tham số.

  66. Q 66.

    Các phương thức train_dataloader, val_dataloader, test_dataloader và predict_dataloader nên trả về gì?

    • A.

      Một DataLoader tương ứng với từng tập.

    • B.

      Một mô hình neural network đã huấn luyện.

    • C.

      Một optimizer đã cấu hình.

    • D.

      Một giá trị loss duy nhất.

  67. Q 67.

    Vai trò của teardown(stage) trong LightningDataModule là gì?

    • A.

      Dọn dẹp tài nguyên sau một giai đoạn, chẳng hạn đóng tệp hoặc giải phóng bộ nhớ.

    • B.

      Tối ưu hạt giống để đạt kết quả tốt nhất.

    • C.

      Tạo checkpoint cuối cùng.

    • D.

      Tính độ chính xác trên tập kiểm tra.

  68. Q 68.

    Khi huấn luyện với nhiều GPU, cách phân chia trách nhiệm nào là đúng?

    • A.

      prepare_data chạy một lần trên một tiến trình; setup được gọi trên mọi tiến trình hoặc GPU.

    • B.

      Cả prepare_data và setup đều chỉ chạy trên GPU số 0.

    • C.

      Chia tập trong prepare_data và gán self trên mọi tiến trình.

    • D.

      Không cần setup nếu đã dùng prepare_data.

  69. Q 69.

    Lợi ích của việc sử dụng tham số stage trong setup(stage) là gì?

    • A.

      Chỉ tạo dữ liệu thật sự cần cho giai đoạn fit, validate, test hoặc predict.

    • B.

      Tự đổi kiến trúc mô hình theo giai đoạn.

    • C.

      Tắt hoàn toàn việc ghi nhật ký.

    • D.

      Bảo đảm mọi GPU có cùng kiến trúc mô hình.

  70. Q 70.

    Để giữ cố định cách chia 55 000 ảnh huấn luyện và 5 000 ảnh kiểm định, cách làm nào phù hợp?

    • A.

      Dùng random_split với Generator có hạt giống cố định.

    • B.

      Chia theo thứ tự tuần tự mà không dùng bất kỳ hạt giống nào.

    • C.

      Dùng cùng tập cho cả huấn luyện và kiểm định.

    • D.

      Chia lại tập sau mỗi epoch bằng hạt giống ngẫu nhiên.

  71. Q 71.

    Cấu hình xáo trộn dữ liệu nên dùng cho các tập huấn luyện, kiểm định và kiểm tra là gì?

    • A.

      Chỉ xáo trộn tập huấn luyện; giữ nguyên thứ tự của tập kiểm định và kiểm tra.

    • B.

      Xáo trộn cả ba tập.

    • C.

      Không xáo trộn tập nào.

    • D.

      Chỉ xáo trộn tập kiểm tra.

  72. Q 72.

    Với drop_last=True, 55 000 ảnh và lô 64, mỗi epoch dùng bao nhiêu ảnh và tạo bao nhiêu lô?

    • A.

      54 976 ảnh và 859 lô.

    • B.

      55 000 ảnh và 860 lô.

    • C.

      54 976 ảnh và 860 lô.

    • D.

      55 000 ảnh và 859 lô.

  73. Q 73.

    Trong trường hợp nào drop_last=True đặc biệt hữu ích?

    • A.

      Khi dùng BatchNorm hoặc huấn luyện nhiều GPU cần các lô cùng kích thước.

    • B.

      Khi muốn đánh giá trên chính xác mọi ảnh trong tập kiểm tra.

    • C.

      Khi muốn tăng số nhãn của mô hình.

    • D.

      Khi không có tập kiểm định.

  74. Q 74.

    Để tránh rò rỉ dữ liệu khi chuẩn hóa đặc trưng, bộ chuẩn hóa n được được học trên đâu?

    • A.

      Trên toàn bộ dữ liệu trước khi chia tập.

    • B.

      Chỉ trên tập huấn luyện, rồi dùng tham số đó cho các tập khác.

    • C.

      Trên tập kiểm tra vì đó là tập lớn nhất.

    • D.

      Trên một tập ngẫu nhiên nhỏ chọn sau khi đánh giá.

  75. Q 75.

    Vai trò của self.log(...) trong LightningModule là gì?

    • A.

      Gửi đại lượng đã tính đến logger của Trainer để theo dõi và so sánh.

    • B.

      Thực hiện backward thủ công.

    • C.

      Chuyển dữ liệu sang GPU.

    • D.

      Tạo DataLoader.

  76. Q 76.

    Mặc định của on_step và on_epoch trong training_step và validation_step khác nhau như thế nào?

    • A.

      Trong training_step: on_step=True, on_epoch=False; trong validation_step và test_step: on_step=False, on_epoch=True.

    • B.

      Cả hai ngữ cảnh đều mặc định on_step=True, on_epoch=True.

    • C.

      Cả hai ngữ cảnh đều mặc định on_step=False, on_epoch=False.

    • D.

      Training_step mặc định theo epoch, validation_step mặc định theo bước.

  77. Q 77.

    Vì sao nhật ký CSV có các dòng chỉ chứa train_loss xen kẽ với các dòng chứa chỉ số kiểm định?

    • A.

      Vì các đại lượng được ghi ở những thời điểm và tần suất khác nhau.

    • B.

      Vì CSVLogger bỏ ngẫu nhiên một số cột.

    • C.

      Vì Trainer chỉ hỗ trợ một loại chỉ số mỗi epoch.

    • D.

      Vì mỗi epoch có số lô khác nhau.

  78. Q 78.

    Khi phân tích metrics.csv, cách nào tạo bảng mỗi epoch một dòng là phù hợp?

    • A.

      Nhóm theo cột epoch và lấy trung bình các cột số, bỏ qua giá trị NaN.

    • B.

      Giữ nguyên mọi dòng và coi mỗi dòng là một epoch.

    • C.

      Chỉ lấy dòng cuối của toàn bộ tệp.

    • D.

      Xóa tất cả dòng có NaN trước khi lưu.

  79. Q 79.

    Việc dùng save_hyperparameters(ignore=['model']) mang lại lợi ích gì?

    • A.

      Lưu siêu tham số cấu hình vào hparams.yaml nhưng không làm checkpoint phình to do chứa cả đối tượng mô hình.

    • B.

      Không lưu bất kỳ siêu tham số nào.

    • C.

      Tự lưu checkpoint tốt nhất theo val_acc.

    • D.

      Ngăn Trainer cập nhật trọng số mô hình.

  80. Q 80.

    Đặc điểm nổi bật của CSVLogger so với TensorBoardLogger là gì?

    • A.

      CSVLogger tạo metrics.csv và hparams.yaml, thuận tiện phân tích bằng pandas.

    • B.

      CSVLogger không thể dùng cùng TensorBoardLogger trong một Trainer.

    • C.

      CSVLogger chỉ lưu checkpoint, không lưu chỉ số.

    • D.

      TensorBoardLogger bắt buộc phải có tài khoản dịch vụ trực tuyến.

  81. Q 81.

    Khi đường cong học cho thấy train_loss tiếp tục giảm trong khi val_loss tăng, chẩn đoán phù hợp nhất là gì?

    • A.

      Mô hình đang quá khớp tập huấn luyện.

    • B.

      Mô hình chưa khớp và cần tăng số epoch.

    • C.

      Tốc độ học chắc chắn bằng không.

    • D.

      Ma trận nhầm lẫn đã được lưu sai.

  82. Q 82.

    Nếu cả train_loss và val_loss đều cao và gần nhau, nên chẩn đoán và hành động nào?

    • A.

      Có thể mô hình chưa khớp; cân nhắc mô hình mạnh hơn, đặc trưng tốt hơn hoặc huấn luyện lâu hơn.

    • B.

      Chắc chắn mô hình quá khớp nên cần tăng Dropout.

    • C.

      Dùng tập kiểm tra để chọn epoch tốt nhất.

    • D.

      Bỏ qua toàn bộ bộ kiểm định.

  83. Q 83.

    Checkpoint .ckpt của Lightning chứa nhiều thông tin hơn state_dict của PyTorch ở khía nào?

    • A.

      Nó có thể chứa trọng số, trạng thái optimizer, lịch trình, epoch, global step, siêu tham số và thông tin callback.

    • B.

      Nó chỉ chứa trọng số và không có siêu tham số.

    • C.

      Nó chỉ chứa dữ liệu huấn luyện.

    • D.

      Nó không thể được nạp bằng load_from_checkpoint.

  84. Q 84.

    Vì sao cần truyền model=pytorch_model khi gọi LightningModel.load_from_checkpoint trong ví dụ này?

    • A.

      Vì đối tượng model đã bị ignore khi lưu siêu tham số nên checkpoint không chứa đối tượng kiến trúc đó.

    • B.

      Vì Lightning không thể khôi phục tốc độ học.

    • C.

      Vì checkpoint không chứa state_dict.

    • D.

      Vì map_location không tự tạo kiến trúc mô hình.

  85. Q 85.

    Ý nghĩa của map_location='cpu' khi nạp checkpoint là gì?

    • A.

      Nạp các tensor về CPU, giúp checkpoint tạo trên GPU vẫn dùng được trên máy không có GPU tương ứng.

    • B.

      Xóa toàn bộ tốc độ học đã lưu.

    • C.

      Buộc mô hình dùng BatchNorm.

    • D.

      Ngăn nạp trọng số.

  86. Q 86.

    Khi dùng mô hình đã nạp để suy luận, vì sao cần gọi model.eval() và torch.inference_mode()?

    • A.

      Để đặt mô hình ở chế độ đánh giá và không theo dõi gradient trong quá trình suy luận.

    • B.

      Để mô hình tự tính lại accuracy trên tập kiểm tra.

    • C.

      Để thay đổi kiến trúc mô hình sang CNN.

    • D.

      Để đồng bộ số batch trong DataLoader.

  87. Q 87.

    Nguyên tắc quan trọng nhất khi tiền xử lý dữ liệu mới để dự đoán là gì?

    • A.

      Dùng cùng chuỗi biến đổi, kích thước, số kênh và thang giá trị như lúc huấn luyện.

    • B.

      Luôn chuyển ảnh về RGB và tăng kích thước lên 224 × 224.

    • C.

      Chuẩn hóa bằng thống kê của từng ảnh mới nếu thuận tiện.

    • D.

      Không cần thêm chiều lô vì model tự xử lý.

  88. Q 88.

    Nếu predict_step trả về một tensor dự đoán cho mỗi lô, trainer.predict thường trả về cấu trúc nào?

    • A.

      Một danh sách tensor, mỗi phần tử tương ứng với một lô.

    • B.

      Một số thực duy nhất làm tròn.

    • C.

      Một đối tượng DataModule.

    • D.

      Một optimizer mới.

  89. Q 89.

    Trong ma trận nhầm lẫn của bài toán phân loại, hàng và cột lần lượt biểu diễn gì?

    • A.

      Hàng là nhãn dự đoán, cột là nhãn thật.

    • B.

      Hàng là nhãn thật, cột là nhãn dự đoán; đường chéo là các dự đoán đúng.

    • C.

      Hàng là batch, cột là epoch.

    • D.

      Cả hàng và cột đều là nhãn dự đoán.

  90. Q 90.

    Theo ma trận nhầm lẫn trong bài, cặp nhầm lẫn thường xuyên nhất là gì?

    • A.

      Chữ số 4 thật bị đoán thành 9, với 18 ảnh.

    • B.

      Chữ số 7 thật bị đoán thành 1, với 18 ảnh.

    • C.

      Chữ số 9 thật bị đoán thành 3, với 18 ảnh.

    • D.

      Chữ số 4 thật bị đoán thành 6, với 18 ảnh.

  91. Q 91.

    Nguyên tắc đúng khi chọn checkpoint và đánh giá mô hình là gì?

    • A.

      Chọn checkpoint tốt nhất theo tập kiểm định và chỉ dùng tập kiểm tra ở bước đánh giá cuối.

    • B.

      Chọn checkpoint có test_acc cao nhất rồi báo cáo lại test_acc đó.

    • C.

      Chọn theo train_loss thấp nhất vì không thể dùng tập kiểm định.

    • D.

      Đánh giá tập kiểm tra sau mỗi epoch để theo dõi tốt nhất.

  92. Q 92.

    Callback trong Lightning được hiểu chính xác là gì?

    • A.

      Một đoạn mã độc lập gắn vào các hook của quá trình huấn luyện để bổ sung hoặc theo dõi hành vi.

    • B.

      Một loại DataLoader chỉ dùng để kiểm tra.

    • C.

      Một optimizer thay thế cho configure_optimizers.

    • D.

      Một kiến trúc mạng thay thế nn.Module.

  93. Q 93.

    Cấu hình ModelCheckpoint nào phù hợp để giữ một checkpoint có val_acc tốt nhất?

    • A.

      monitor='val_acc', mode='max', save_top_k=1.

    • B.

      monitor='val_acc', mode='min', save_top_k=1.

    • C.

      monitor='valid_acc', mode='max', save_top_k=1.

    • D.

      monitor='test_acc', mode='max', save_top_k=1.

  94. Q 94.

    Với EarlyStopping có monitor='val_acc', mode='max', patience=3, Trainer dừng khi nào?

    • A.

      Ngay sau epoch đầu tiên nếu val_acc chưa đạt 100%.

    • B.

      Khi val_acc không cải thiện trong 3 epoch liên tiếp.

    • C.

      Khi train_loss không còn giảm sau đúng 3 bước.

    • D.

      Sau 3 epoch bất kể val_acc thay đổi thế nào.

  95. Q 95.

    Theo phép thử thực tế, một đoạn mã nên được đặt trong callback thay vì LightningModule khi nào?

    • A.

      Khi đoạn mã đó cần thiết để mô hình học đúng, chẳng hạn hàm mất mát.

    • B.

      Khi bỏ đoạn mã đó, mô hình vẫn huấn luyện đúng nhưng thiếu chức năng bổ sung.

    • C.

      Khi đoạn mã đó chỉ dùng để tạo DataLoader.

    • D.

      Luôn luôn, bất kể mục đích của đoạn mã.

  96. Q 96.

    Thứ tự hook nào trong một epoch là đúng?

    • A.

      on_train_epoch_end, rồi validation, rồi on_train_epoch_start.

    • B.

      on_train_epoch_start, các bước huấn luyện, kiểm định, rồi on_validation_epoch_end và on_train_epoch_end.

    • C.

      validation, on_train_epoch_start, on_train_epoch_end, rồi huấn luyện.

    • D.

      on_train_epoch_end, rồi on_validation_epoch_start và on_validation_epoch_end.

  97. Q 97.

    Khi tự viết callback đo thời gian huấn luyện, cách import và hook nào phù hợp?

    • A.

      Kế thừa Callback từ lightning.pytorch.callbacks, rồi dùng on_train_start và on_train_end với trainer, pl_module.

    • B.

      Kế thừa Dataset từ torchvision và dùng len.

    • C.

      Kế thừa Optimizer và dùng step.

    • D.

      Dùng một hàm không có lớp để gọi sau mỗi batch.

  98. Q 98.

    Cấu hình nào tránh được đồng thời hai lỗi thường gặp là tên chỉ số không khớp và hạt giống đặt quá muộn?

    • A.

      Dùng monitor='valid_acc' và gọi torch.manual_seed sau khi tạo mô hình.

    • B.

      Dùng một metric chung cho mọi tập và đặt hạt giống ở cuối chương trình.

    • C.

      Dùng monitor='val_acc' khớp với tên đã log và đặt seed_everything trước khi tạo dữ liệu, mô hình.

    • D.

      Không dùng checkpoint và không đặt hạt giống.

  99. Q 99.

    Cấu trúc dự án nào phù hợp nhất với tổ chức mã Lightning trong bài?

    • A.

      Một tệp duy nhất chứa model, dữ liệu, huấn luyện, callback và đánh giá.

    • B.

      Các tệp data.py, model.py, callbacks.py, train.py, evaluate.ipynb và thư mục logs; dùng thống nhất gói lightning.

    • C.

      Tách tệp nhưng trộn callback của pytorch_lightning với Trainer của lightning.

    • D.

      Đặt LightningDataModule trong model.py và Trainer trong data.py.

  100. Q 100.

    Trình tự triển khai nào cho một thí nghiệm hoàn chỉnh là hợp lý nhất?

    • A.

      Tạo Trainer trước, chọn checkpoint theo test_acc, rồi mới đặt hạt giống và huấn luyện.

    • B.

      Đặt hạt giống, tạo DataModule và LightningModule, cấu hình Trainer cùng ModelCheckpoint theo val_acc, gọi fit, rồi test checkpoint tốt nhất một lần.

    • C.

      Dùng chung một metric cho train, validation và test, sau đó đánh giá lại tập kiểm tra nhiều lần để chọn kết quả.

    • D.

      Dùng torch.save(model.state_dict()) rồi không cần kiểm tra lại mô hình sau khi nạp.

Answers and explanations are in mode.

Similar Học sâu ứng dụng exams