Ngân hàng câu hỏi của chương

Câu hỏi: DAT301M - Phần 1: TensorFlow và mạng nơ-ron cho thị giác máy tính

22 câu trắc nghiệm kèm lời giải của môn DAT301m - Phát triển UDTTNT với TensorFlow, xếp theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/22 câuCòn 2
1Which activation has range [0, ∞)?4 lựa chọn
ATanh
BSigmoid
CReLU
DSoftsign
Lời giải
Đáp án đúng: "ReLU". Hàm kích hoạt ReLU (Rectified Linear Unit) tính f(x) = max(0, x): mọi đầu vào âm bị chặn về 0, còn đầu vào dương giữ nguyên nên không có trần trên, vì vậy miền giá trị là [0, ∞). Chính việc không bão hoà ở phía dương giúp ReLU giảm hiện tượng vanishing gradient (gradient biến mất) và là lựa chọn mặc định cho lớp ẩn trong Keras (activation='relu'). "Tanh" sai vì tanh nén đầu vào về khoảng (−1, 1), đối xứng quanh 0. "Sigmoid" sai vì sigmoid 1/(1 + e^(−x)) cho giá trị trong (0, 1), thường dùng ở lớp ra của phân loại nhị phân để biểu diễn xác suất. "Softsign" sai vì softsign x/(1 + |x|) cũng bị chặn trong (−1, 1), giống tanh nhưng tiến về tiệm cận chậm hơn.
Mở trang câu hỏi này →
AIt repeats the dataset multiple times during training.
BIt adds noise to the dataset.
CIt repeats the feature-label pairs within each batch.
DIt reshapes the dataset.
Lời giải
Đáp án đúng: "It repeats the dataset multiple times during training.". Phương thức repeat của tf.data.Dataset nối dữ liệu với chính nó: dataset.repeat(n) lặp toàn bộ tập n lần, còn repeat() không đối số lặp vô hạn, nhờ đó vòng huấn luyện có thể đi qua dữ liệu nhiều epoch (lượt) mà không phải tạo lại pipeline; khi lặp vô hạn thì cần steps_per_epoch để model.fit biết lúc kết thúc một epoch. "It adds noise to the dataset." sai vì repeat không thay đổi giá trị phần tử nào; muốn thêm nhiễu phải dùng map với một hàm biến đổi hoặc lớp GaussianNoise. "It repeats the feature-label pairs within each batch." sai vì repeat thao tác trên cả tập dữ liệu chứ không nhân bản cặp đặc trưng–nhãn bên trong một batch; việc gom batch do batch đảm nhận. "It reshapes the dataset." sai vì đổi hình dạng tensor phải dùng tf.reshape trong map, repeat giữ nguyên shape của từng phần tử.
Mở trang câu hỏi này →
AIt restricts access to only one user at a time.
BIt allows real-time collaboration with multiple users on the same notebook.
CIt requires users to download and upload notebooks for sharing.
DIt only supports offline collaboration.
Lời giải
Đáp án đúng: "It allows real-time collaboration with multiple users on the same notebook.". Google Colab lưu notebook trên Google Drive, nên có thể chia sẻ bằng liên kết hoặc cấp quyền như một tài liệu Google; nhiều người cùng mở, chỉnh sửa ô mã, ô văn bản và để lại bình luận trên cùng một notebook mà không phải gửi tệp qua lại, rất tiện cho nhóm cùng làm một mô hình TensorFlow. "It restricts access to only one user at a time." trái với cơ chế chia sẻ của Drive, vốn cho phép nhiều người truy cập cùng lúc. "It requires users to download and upload notebooks for sharing." mô tả đúng cách làm thủ công với notebook chạy cục bộ, còn Colab chia sẻ trực tiếp trên đám mây nên không cần tải xuống rồi tải lên. "It only supports offline collaboration." sai vì Colab là dịch vụ chạy trên trình duyệt, cần kết nối mạng để dùng runtime và để cộng tác.
Mở trang câu hỏi này →
AZero padding
BSame padding
CValid padding
DSymmetric padding
Lời giải
Đáp án đúng: "Same padding". Trong Conv2D, đặt padding='same' thì Keras tự đệm thêm viền quanh ảnh sao cho với stride bằng 1, đầu ra có cùng chiều cao và chiều rộng với đầu vào; ví dụ ảnh 28×28 qua bộ lọc 3×3 được đệm mỗi phía 1 điểm ảnh nên vẫn ra 28×28. "Valid padding" sai vì padding='valid' nghĩa là không đệm, đầu ra co lại theo công thức n − k + 1, ví dụ 28 − 3 + 1 = 26. "Zero padding" sai vì đây chỉ nói giá trị dùng để đệm là số 0 mà không quy định đệm bao nhiêu; đệm ít hơn mức cần thì kích thước vẫn giảm, nên thuật ngữ này không bảo đảm giữ nguyên kích thước như same padding. "Symmetric padding" sai vì đó là kiểu đệm lấy giá trị phản chiếu từ mép ảnh (chế độ SYMMETRIC của tf.pad), mô tả nội dung phần đệm chứ không phải tùy chọn padding của lớp tích chập, và tự nó không cam kết giữ kích thước.
Mở trang câu hỏi này →
Atf.reshape(v, (3, 4))
Btf.resize(v, (3, 4))
Ctf.transform(v, (3, 4))
Dtf.matrixize(v, (3, 4))
Lời giải
Đáp án đúng: "tf.reshape(v, (3, 4))". tf.reshape đổi hình dạng (shape) của tensor mà giữ nguyên các phần tử và thứ tự của chúng, với điều kiện tổng số phần tử không đổi; vector dài 12 thành ma trận 3×4 hợp lệ vì 3 × 4 = 12, và có thể viết (3, -1) để TensorFlow tự suy ra chiều còn lại là 12 / 3 = 4. "tf.resize(v, (3, 4))" không phải hàm của TensorFlow; hàm gần tên là tf.image.resize dùng để co giãn ảnh bằng nội suy, làm thay đổi giá trị điểm ảnh chứ không chỉ sắp xếp lại phần tử. "tf.transform(v, (3, 4))" không tồn tại trong API TensorFlow. "tf.matrixize(v, (3, 4))" cũng không tồn tại; TensorFlow không có hàm riêng để biến vector thành ma trận vì việc đó chính là đổi shape bằng tf.reshape.
Mở trang câu hỏi này →
AAccuracy Score
BCompression Ratio
CSignal-to-Noise Ratio (SNR)
DLearning Rate
Lời giải
Đáp án đúng: "Signal-to-Noise Ratio (SNR)". Khi nén ảnh có mất mát, phần sai lệch giữa ảnh gốc và ảnh giải nén được coi như nhiễu; tỉ số tín hiệu trên nhiễu, thường dùng ở dạng PSNR (Peak SNR, tính theo decibel từ sai số bình phương trung bình), đo xem chất lượng còn giữ được bao nhiêu sau khi nén, nên đặt nó cạnh mức nén cho thấy sự đánh đổi giữa nén mạnh và chất lượng. "Accuracy Score" sai vì độ chính xác là thước đo của bài toán phân loại, không đo độ giống nhau giữa hai ảnh. "Compression Ratio" chỉ cho biết dung lượng giảm bao nhiêu lần, tức một vế của sự đánh đổi; bản thân nó không nói gì về chất lượng ảnh nên không đo được trade-off mà câu hỏi nói tới. "Learning Rate" sai vì đó là siêu tham số điều khiển bước cập nhật trọng số khi huấn luyện, không phải thước đo chất lượng ảnh.
Mở trang câu hỏi này →
AThe process of getting very close to the correct answer.
BA dramatic increase in loss.
CA programming API for AI.
DAn analysis that corresponds too closely or exactly to a particular set of data.
Lời giải
Đáp án đúng: "The process of getting very close to the correct answer.". Convergence (hội tụ) mô tả quá trình huấn luyện mà sau nhiều lần cập nhật trọng số bằng gradient descent, giá trị loss giảm dần và ổn định quanh mức nhỏ nhất, tức dự đoán của mô hình tiến rất gần tới đáp án đúng; nhìn trên đồ thị, đường loss đi xuống rồi đi ngang. "A dramatic increase in loss." sai vì loss tăng vọt là dấu hiệu phân kỳ (divergence), thường do learning rate quá lớn, ngược với hội tụ. "A programming API for AI." sai vì hội tụ là một khái niệm của quá trình tối ưu, không phải một thư viện hay giao diện lập trình như Keras. "An analysis that corresponds too closely or exactly to a particular set of data." sai vì đó là định nghĩa của overfitting (quá khớp), khi mô hình bám quá sát dữ liệu huấn luyện và kém tổng quát.
Mở trang câu hỏi này →
AA scalar value
BA matrix
CAnother vector
DA higher-dimensional tensor
Lời giải
Đáp án đúng: "Another vector". Phép cộng hai vectơ cùng số chiều trong TensorFlow (tf.add hoặc toán tử +) là phép toán theo từng phần tử (element-wise): phần tử thứ i của kết quả bằng tổng hai phần tử thứ i, nên đầu ra có cùng shape với đầu vào, ví dụ [1, 2, 3] + [4, 5, 6] = [5, 7, 9], vẫn là một tensor hạng 1. "A scalar value" sai vì ra một số vô hướng là kết quả của tích vô hướng (tf.tensordot hoặc tf.reduce_sum của tích), không phải phép cộng. "A matrix" sai vì muốn ra ma trận phải dùng tích ngoài (outer product) hoặc broadcasting giữa vectơ hàng và vectơ cột có shape khác nhau, còn ở đây hai vectơ cùng shape. "A higher-dimensional tensor" sai vì phép cộng phần tử không làm tăng hạng tensor; hạng đầu ra bằng hạng đầu vào.
Mở trang câu hỏi này →
A148x148
B153x153
C150x150
D450x450
Lời giải
Đáp án đúng: "148x148". Lớp Conv2D với padding mặc định 'valid' (không đệm) và stride 1 chỉ đặt bộ lọc ở những vị trí nằm trọn trong ảnh, nên mỗi chiều đầu ra bằng kích thước vào − kích thước kernel + 1, tức 150 − 3 + 1 = 148; ảnh 150x150 qua kernel 3x3 cho bản đồ đặc trưng 148x148, mất một điểm ảnh ở mỗi viền. "153x153" sai vì tích chập không đệm không bao giờ làm ảnh lớn hơn; con số này là cộng thêm kích thước kernel thay vì trừ. "150x150" sai vì giữ nguyên kích thước chỉ xảy ra khi đặt padding='same', còn câu hỏi mô tả tích chập 3x3 thông thường. "450x450" sai vì đó là nhân 150 với 3, nhầm phép tích chập với phóng to ảnh; kích thước kernel không nhân vào kích thước đầu ra.
Mở trang câu hỏi này →
Atf.add(MaxPooling2D())
Btf.layers.add(MaxPooling2D())
Ctf.keras.layers.MaxPooling2D()
Dtf.pooling.add(MaxPooling2D())
Lời giải
Đáp án đúng: "tf.keras.layers.MaxPooling2D()". Trong Keras, max pooling là một lớp nằm trong module tf.keras.layers và được khởi tạo như mọi lớp khác, rồi đặt vào danh sách của tf.keras.Sequential hoặc thêm bằng model.add; mặc định pool_size=(2, 2) lấy giá trị lớn nhất trong mỗi ô 2×2, làm chiều rộng và chiều cao bản đồ đặc trưng giảm một nửa, ví dụ 26×26 thành 13×13. "tf.add(MaxPooling2D())" dùng nhầm tf.add, vốn là phép cộng từng phần tử giữa hai tensor chứ không phải thao tác thêm lớp. "tf.layers.add(MaxPooling2D())" không phải API hợp lệ; việc thêm lớp là phương thức add của đối tượng mô hình chứ không nằm trong module lớp. "tf.pooling.add(MaxPooling2D())" cũng không tồn tại vì TensorFlow không có module tf.pooling với hàm add.
Mở trang câu hỏi này →
ABy adding more neurons to the dense layers
BBy increasing the number of convolutional layers
CBy reducing the number of pooling layers
DBy removing the activation functions from the layers
Lời giải
Đáp án đúng: "By increasing the number of convolutional layers". Độ sâu của ConvNet là số lớp xếp chồng; thêm các khối Conv2D (thường đi kèm MaxPooling2D) giúp các lớp đầu học cạnh và góc, các lớp sau ghép chúng thành họa tiết, bộ phận rồi cả vật thể, nên mạng nắm được đặc trưng phân cấp phức tạp hơn của ảnh lớn hay ảnh màu. "By adding more neurons to the dense layers" sai vì làm vậy chỉ mở rộng bề ngang phần phân loại phía sau, không tăng số tầng trích xuất đặc trưng và còn làm số tham số phình to. "By reducing the number of pooling layers" sai vì bớt pooling chỉ làm bản đồ đặc trưng giữ kích thước lớn hơn, tốn tính toán hơn, chứ không thêm tầng học nào. "By removing the activation functions from the layers" sai vì không có hàm kích hoạt phi tuyến như ReLU thì nhiều lớp tuyến tính chồng lên nhau tương đương một lớp tuyến tính duy nhất, khiến mạng kém biểu diễn hơn chứ không sâu hơn.
Mở trang câu hỏi này →
A%install tensorflow
B!pip install tensorflow
C#install tensorflow
D$conda install tensorflow
Lời giải
Đáp án đúng: "!pip install tensorflow". Trong ô mã Colab, dấu chấm than ở đầu dòng báo cho notebook chạy phần còn lại như một lệnh shell của máy ảo, nên lệnh pip cài gói TensorFlow vào môi trường Python của runtime; thực tế Colab đã cài sẵn TensorFlow, lệnh này thường dùng để cài hoặc đổi phiên bản cụ thể. "%install tensorflow" dùng tiền tố phần trăm của magic command nhưng không có magic nào tên install; magic thật cho việc này là pip với tiền tố phần trăm. "#install tensorflow" chỉ là một dòng chú thích Python, trình thông dịch bỏ qua nên không cài gì cả. "$conda install tensorflow" sai vì dấu đô la không phải tiền tố lệnh trong notebook, và runtime Colab mặc định dùng pip chứ không có conda.
Mở trang câu hỏi này →
AEarlyStopping
BModelCheckpoint
CCustomCallback
DTensorBoard
Lời giải
Đáp án đúng: "CustomCallback". Đây là câu phủ định: trong tf.keras.callbacks không có lớp dựng sẵn tên CustomCallback; muốn có hành vi riêng, ta tự viết lớp con kế thừa tf.keras.callbacks.Callback và ghi đè các phương thức như on_epoch_end hay on_batch_end, tên lớp do người dùng tự đặt. "EarlyStopping" là callback có sẵn, dừng huấn luyện khi chỉ số theo dõi như val_loss không cải thiện sau số epoch bằng patience, nên không phải đáp án. "ModelCheckpoint" cũng có sẵn, lưu mô hình hoặc trọng số trong quá trình huấn luyện, có thể chỉ giữ bản tốt nhất bằng save_best_only, nên không được chọn. "TensorBoard" là callback dựng sẵn ghi log loss, metric và biểu đồ vào thư mục log_dir để xem trên công cụ TensorBoard, vì vậy cũng không phải đáp án.
Mở trang câu hỏi này →
AExport it to a PDF file and share the file manually.
BUse the "Share" button to generate a shareable link.
CColab does not support collaboration features.
DCopy and paste the code into an email.
Lời giải
Đáp án đúng: "Use the "Share" button to generate a shareable link.". Google Colab lưu notebook trên Google Drive, nên nút Share ở góc trên cho phép mời người khác qua email hoặc tạo đường liên kết chia sẻ, kèm quyền xem, nhận xét hay chỉnh sửa giống tài liệu Google Docs; người nhận mở link là thấy cả mã lẫn kết quả chạy. "Export it to a PDF file and share the file manually." sai vì PDF chỉ là bản chụp tĩnh, người nhận không chạy hay sửa mã được, nên không phải cộng tác. "Colab does not support collaboration features." sai vì Colab có sẵn chia sẻ, phân quyền và nhận xét. "Copy and paste the code into an email." sai vì cách đó làm mất cấu trúc ô, kết quả đầu ra và không cho cùng chỉnh sửa một bản; đó là chép mã chứ không phải chia sẻ notebook.
Mở trang câu hỏi này →
15What is the function of ReLU?4 lựa chọn
AIt only returns x if x is greater than zero
BFor a value x, it returns 1/x
CIt only returns x if x is less than zero
DIt returns the negative of x
Lời giải
Đáp án đúng: "It only returns x if x is greater than zero". ReLU (Rectified Linear Unit, hàm kích hoạt tuyến tính chỉnh lưu) được định nghĩa là max(0, x): giữ nguyên x khi x dương và trả về 0 với mọi giá trị còn lại, nhờ vậy tạo tính phi tuyến cho mạng, tính rất nhanh và giảm hiện tượng gradient biến mất so với sigmoid; trong Keras dùng bằng activation='relu'. "For a value x, it returns 1/x" mô tả phép nghịch đảo, không liên quan đến ReLU và còn không xác định khi x bằng 0. "It only returns x if x is less than zero" đảo ngược ngưỡng, ReLU giữ phần dương và chặn phần âm về 0 chứ không làm điều ngược lại. "It returns the negative of x" là phép đổi dấu, một hàm tuyến tính nên không tạo được tính phi tuyến như hàm kích hoạt cần có.
Mở trang câu hỏi này →
16What is TensorFlow Lite used for?4 lựa chọn
ADeveloping large-scale distributed machine learning models.
BOptimizing and deploying machine learning models on mobile and embedded devices.
CVisualizing the computation graph of a TensorFlow model.
DImplementing natural language processing tasks.
Lời giải
Đáp án đúng: "Optimizing and deploying machine learning models on mobile and embedded devices.". TensorFlow Lite chuyển mô hình đã huấn luyện sang định dạng .tflite nhỏ gọn bằng TFLiteConverter, có thể lượng tử hoá (quantization) trọng số để giảm kích thước và tăng tốc, rồi chạy bằng trình thông dịch trên Android, iOS, vi điều khiển hay thiết bị biên mà không cần máy chủ. "Developing large-scale distributed machine learning models." sai vì huấn luyện phân tán quy mô lớn dùng các chiến lược của tf.distribute trên cụm GPU hoặc TPU, ngược hẳn với mục tiêu thiết bị nhỏ. "Visualizing the computation graph of a TensorFlow model." sai vì trực quan hoá đồ thị tính toán là việc của TensorBoard. "Implementing natural language processing tasks." sai vì TensorFlow Lite có thể chạy mô hình xử lý ngôn ngữ đã chuyển đổi, nhưng nó là công cụ triển khai cho mọi loại mô hình, không phải thư viện chuyên để xây dựng bài toán ngôn ngữ.
Mở trang câu hỏi này →
ATensorFlow Core
BTensorFlow Lite
CTensorFlow Keras
DTensorFlow Graph
Lời giải
Đáp án đúng: "TensorFlow Keras". Keras, truy cập qua tf.keras, là API cấp cao chính thức của TensorFlow từ phiên bản 2: nó cung cấp Sequential, các lớp như Dense, Conv2D, LSTM và chu trình compile, fit, evaluate, predict, giúp dựng và huấn luyện mô hình chỉ với vài dòng mã. "TensorFlow Core" sai vì đó là tầng cấp thấp với tensor, phép toán và tf.GradientTape, cho kiểm soát chi tiết nhưng không phải API cấp cao. "TensorFlow Lite" sai vì đó là bộ công cụ chuyển đổi và chạy mô hình đã huấn luyện trên thiết bị di động hoặc nhúng, không dùng để xây và huấn luyện. "TensorFlow Graph" sai vì đồ thị tính toán (tf.Graph, tf.function) là cách TensorFlow biểu diễn và tối ưu phép tính bên dưới, không phải một API cấp cao để dựng mô hình.
Mở trang câu hỏi này →
AOverfitting
BUnderfitting
CLoss of information at the edges of an image
DLack of model interpretability
Lời giải
Đáp án đúng: "Loss of information at the edges of an image". Khi trượt bộ lọc tích chập mà không đệm, điểm ảnh ở rìa được bộ lọc đi qua ít lần hơn điểm ở giữa và kích thước đầu ra co lại, ví dụ ảnh 28×28 qua bộ lọc 3×3 còn 28 − 3 + 1 = 26; padding (đệm) thêm viền giá trị 0 quanh ảnh, với padding='same' đầu ra giữ nguyên 28×28 và thông tin ở rìa được xử lý đầy đủ hơn. "Overfitting" là hiện tượng mô hình học thuộc dữ liệu huấn luyện, được xử lý bằng dropout, augmentation hay regularization chứ không phải bằng padding. "Underfitting" là mô hình quá yếu để học quy luật, cách chữa là tăng dung lượng hoặc huấn luyện lâu hơn. "Lack of model interpretability" là vấn đề khó giải thích quyết định của mạng, không liên quan đến việc giữ kích thước hay thông tin rìa ảnh.
Mở trang câu hỏi này →
AZero padding and feature padding
BCircular padding and symmetric padding
CValid padding and same padding
DDynamic padding and fixed padding
Lời giải
Đáp án đúng: "Valid padding and same padding". Trong các lớp Conv2D và pooling của TensorFlow, tham số padding chỉ nhận hai giá trị: 'valid' là không đệm, bộ lọc chỉ trượt ở vị trí nằm trọn trong ảnh nên đầu ra nhỏ đi (ảnh 28 qua kernel 3 còn 28 − 3 + 1 = 26); 'same' là đệm 0 quanh viền để với stride 1 đầu ra giữ nguyên kích thước đầu vào. "Zero padding and feature padding" sai vì zero padding chỉ là cách thực hiện của 'same', còn feature padding không phải một chế độ có trong TensorFlow. "Circular padding and symmetric padding" sai vì đó là kiểu đệm theo vòng hoặc đối xứng gương; tf.pad có chế độ 'SYMMETRIC' và 'REFLECT' nhưng chúng không phải hai giá trị padding của lớp tích chập. "Dynamic padding and fixed padding" sai vì đây không phải tên chế độ đệm trong TensorFlow; đệm động theo batch là khái niệm của việc xếp batch chuỗi văn bản.
Mở trang câu hỏi này →
Atf.dot(v1, v2)
Btf.matmul(v1, v2)
Ctf.multiply(v1, v2)
Dtf.dot_product(v1, v2)
Lời giải
Đáp án đúng: "tf.matmul(v1, v2)". Tích vô hướng là nhân từng cặp phần tử rồi cộng lại; tf.matmul thực hiện phép nhân ma trận nên cho đúng kết quả đó khi hai vector được đưa về dạng hàng nhân cột, ví dụ reshape v1 thành [1, n] và v2 thành [n, 1] để được ma trận 1×1 chứa tích vô hướng, vì tf.matmul đòi tensor có ít nhất hai chiều; ngoài các lựa chọn ở đây, cách gọn hơn là tf.tensordot(v1, v2, axes=1). "tf.dot(v1, v2)" không tồn tại trong TensorFlow, tên này quen thuộc từ NumPy là np.dot. "tf.multiply(v1, v2)" chỉ nhân từng phần tử và trả về một vector cùng độ dài, còn phải cộng thêm bằng tf.reduce_sum mới thành tích vô hướng. "tf.dot_product(v1, v2)" cũng là tên không có trong API TensorFlow.
Mở trang câu hỏi này →