Chủ đề 5: Tổ chức mã nguồn với PyTorch Lightning
Exam info
- Subject
- Học sâu ứng dụng
- Exam type
- University
- Questions
- 100
- Duration
- 150 min
- Answers
- ✓ With explanations
Questions (100)
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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
lightningcho Trainer nhưng trộn callback củapytorch_lightning. - B.
Chỉ dùng
pytorch_lightningtrong 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.
- A.
- 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.
forwardvàvalidation_step. - B.
training_stepvàconfigure_optimizers. - C.
test_stepvàpredict_step. - D.
setupvàteardown.
- A.
- Q 10.
Vai trò chính của phương thức
forwardtrong 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.
- A.
- Q 11.
Điều gì xảy ra nếu
training_steptí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.
- A.
- 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.
- A.
- Q 13.
Lợi ích chính của mẫu thiết kế bọc một
nn.Modulebê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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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_optimizerscủa LightningModule. - B.
Trong
prepare_datacủa LightningDataModule. - C.
Trong phương thức
on_train_endcủa callback. - D.
Trong hàm khởi tạo DataLoader.
- A.
- 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.
- A.
- 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.
- A.
- Q 20.
Tham số
max_epochs=10củ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.
- A.
- 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ị.
- A.
- 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.
- A.
- 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.
- A.
- Q 24.
Ý nghĩa của
deterministic=Truetrong 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.
- A.
- Q 25.
Tham số
default_root_dircủ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.
- A.
- Q 26.
Vai trò của tham số
loggertrong 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.
- A.
- Q 27.
Cấu hình
callbackscủ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.
- A.
- Q 28.
Tham số
log_every_n_steps=50quy đị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ử.
- A.
- Q 29.
fast_dev_run=Truethí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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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ô.
- A.
- 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.
- A.
- 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.
- A.
- 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ố.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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%.
- A.
- 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.
- A.
- 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.
- A.
- 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').
- A.
- 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=Truevàon_step=False. - B.
Đặt
on_epoch=Falsevà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.
- A.
- 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.
- A.
- 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.
- A.
- 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.testsau 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.
- A.
- 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ố.
- A.
- 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_dictvới bộ chỉ số của MetricCollection. - B.
Gọi
self.logriêng cho từng phần tử và bỏ qua MetricCollection. - C.
In từng chỉ số bằng
printtrong mỗi lô. - D.
Chuyển MetricCollection thành optimizer.
- A.
- 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.
- A.
- 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ả.
- A.
- Q 56.
Vì sao nên truyền
generator=torch.Generator().manual_seed(42)chorandom_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.
- A.
- Q 57.
Nếu đổi hạt giống riêng của
random_splittừ 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ệ.
- A.
- 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=Truevà 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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 == brồ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.
- A.
- 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ả.
- A.
- 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_traintrê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.
- A.
- 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ố.
- A.
- Q 66.
Các phương thức
train_dataloader,val_dataloader,test_dataloadervàpredict_dataloadernê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.
- A.
- 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.
- A.
- 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.
- A.
- Q 69.
Lợi ích của việc sử dụng tham số
stagetrongsetup(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.
- A.
- 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_splitvớ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.
- A.
- 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.
- A.
- 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ô.
- A.
- 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.
- A.
- 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á.
- A.
- 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.
- A.
- Q 76.
Mặc định của
on_stepvàon_epochtrong 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.
- A.
- Q 77.
Vì sao nhật ký CSV có các dòng chỉ chứa
train_lossxen 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.
- A.
- 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
epochvà 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.
- A.
- 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.
- A.
- Q 80.
Đặc điểm nổi bật của CSVLogger so với TensorBoardLogger là gì?
- A.
CSVLogger tạo
metrics.csvvà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.
- A.
- 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.
- A.
- 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.
- A.
- Q 83.
Checkpoint
.ckptcủ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.
- A.
- Q 84.
Vì sao cần truyền
model=pytorch_modelkhi gọiLightningModel.load_from_checkpointtrong 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_locationkhông tự tạo kiến trúc mô hình.
- A.
- 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ố.
- A.
- 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.
- A.
- 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ý.
- A.
- Q 88.
Nếu
predict_steptrả về một tensor dự đoán cho mỗi lô,trainer.predictthườ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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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.
- A.
- 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ã.
- A.
- 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.
- A.
- 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.
- A.
- 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ọitorch.manual_seedsau 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à đặtseed_everythingtrước khi tạo dữ liệu, mô hình. - D.
Không dùng checkpoint và không đặt hạt giống.
- A.
- 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.
- A.
- 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.
- A.
Answers and explanations are in mode.