Câu hỏi: DAT301m Phát triển UDTTNT với TensorFlow – Bộ ôn tập cuối kỳ số 1
50 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 đúng thứ tự trong đề.
Danh sách câu hỏi
20/50 câuCòn 30
ATo normalize the output probabilities over multiple words
BTo apply non-linearity to the input sequences
CTo control the learning rate during training
DTo calculate the loss function
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To normalize the output probabilities over multiple words". Trong mô hình dự đoán từ tiếp theo, lớp Dense cuối có số nơ-ron bằng kích thước từ vựng và dùng activation softmax: hàm này lấy mũ từng logit rồi chia cho tổng, biến vector điểm thành phân phối xác suất (mọi giá trị dương, tổng bằng 1) trên toàn bộ các từ, từ đó chọn từ có xác suất cao nhất hoặc lấy mẫu. "To apply non-linearity to the input sequences" sai vì tính phi tuyến ở các lớp ẩn do ReLU, tanh hay các cổng của LSTM đảm nhận, còn softmax đặt ở đầu ra chứ không tác động lên chuỗi đầu vào. "To control the learning rate during training" sai vì learning rate (tốc độ học) là siêu tham số của optimizer như Adam, không liên quan tới hàm kích hoạt. "To calculate the loss function" sai vì hàm mất mát như categorical_crossentropy được tính riêng, nó chỉ nhận xác suất do softmax tạo ra làm đầu vào chứ softmax không phải là hàm mất mát.
2Which activation has range [0, ∞)?4 lựa chọn
A
TanhB
SigmoidC
ReLUD
SoftsignLời giải
Mở trang câu hỏi này →Đá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.
ABy removing all time-dependent features
BBy using a rolling mean to smooth the data
CBy incorporating dummy variables for each season
DBy applying dimensionality reduction techniques
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "By incorporating dummy variables for each season". Seasonality (tính mùa vụ) là mẫu lặp lại theo chu kỳ cố định như theo tháng, quý hay ngày trong tuần; khi thêm dummy variables (biến giả), mỗi mùa được mã hoá thành một cột 0/1 kiểu one-hot, nhờ đó mô hình học được mức tăng giảm riêng của từng mùa và dùng nó khi dự báo. "By removing all time-dependent features" đi ngược mục tiêu, vì bỏ hết đặc trưng phụ thuộc thời gian thì mất luôn thông tin cần để nhận ra chu kỳ. "By using a rolling mean to smooth the data" có ích khi muốn làm mượt nhiễu hoặc ước lượng xu hướng trong bước phân rã chuỗi, nhưng làm mượt chỉ che bớt dao động chứ không cho mô hình biểu diễn hiệu ứng của từng mùa. "By applying dimensionality reduction techniques" như PCA chỉ nén nhiều đặc trưng thành ít chiều hơn, không nhắm vào mẫu lặp theo thời gian nên không xử lý được mùa vụ.
AIt avoids using pre-trained models altogether.
BIt allows the model to ignore the knowledge from the pre-trained model.
CIt transfers knowledge from the pre-trained model to improve performance on a new task.
DTransfer learning has no impact on model performance.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It transfers knowledge from the pre-trained model to improve performance on a new task.". Transfer learning (học chuyển giao) lấy một mô hình đã huấn luyện trên tập lớn như ImageNet, giữ lại phần trích xuất đặc trưng (thường đặt trainable = False), rồi gắn thêm các lớp mới cho bài toán của mình; các đặc trưng đã học như cạnh, kết cấu, hình khối được tái sử dụng nên mô hình mới đạt độ chính xác cao hơn với ít dữ liệu và thời gian huấn luyện hơn. "It avoids using pre-trained models altogether." sai vì transfer learning chính là dùng mô hình đã huấn luyện sẵn làm điểm xuất phát. "It allows the model to ignore the knowledge from the pre-trained model." sai vì mục đích là tận dụng tri thức đó, bỏ qua nó thì chẳng khác huấn luyện từ đầu. "Transfer learning has no impact on model performance." sai vì lợi ích chính của kỹ thuật này là cải thiện hiệu năng và rút ngắn huấn luyện, nhất là khi tập dữ liệu mới nhỏ.
AExpanding words to their full forms
BReducing words to their root or base form
CAnalyzing sentence structure
DIdentifying entities in text
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Reducing words to their root or base form". Stemming (rút gọn về gốc từ) là bước tiền xử lý văn bản cắt bỏ hậu tố để đưa các biến thể về cùng một dạng gốc, ví dụ "running", "runs" đều thành "run"; nhờ vậy từ vựng nhỏ lại và các từ cùng nghĩa được đếm chung, có ích cho mô hình túi từ hay tìm kiếm. "Expanding words to their full forms" sai vì đó là mở rộng từ viết tắt hoặc dạng rút gọn (như "don't" thành "do not"), ngược hướng với việc cắt từ về gốc. "Analyzing sentence structure" sai vì phân tích cấu trúc câu là parsing (phân tích cú pháp), làm việc ở mức quan hệ giữa các từ chứ không biến đổi hình thái từng từ. "Identifying entities in text" sai vì nhận diện thực thể như tên người, địa danh là nhiệm vụ Named Entity Recognition (NER), không liên quan tới việc rút gọn hình thái từ.
AA single line indicating both training and validation accuracies
BTwo separate lines for training and validation accuracies
CA bar chart comparing training and validation accuracies
DA scatter plot showing individual data points
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Two separate lines for training and validation accuracies". Sau khi gọi model.fit với dữ liệu kiểm định, đối tượng history lưu accuracy và val_accuracy theo từng epoch; cách vẽ chuẩn là hai đường trên cùng một trục, trục hoành là epoch, để thấy hai đường cùng đi lên hay tách xa nhau, từ đó nhận ra overfitting (quá khớp) khi độ chính xác huấn luyện tiếp tục tăng còn độ chính xác kiểm định chững lại hoặc giảm. "A single line indicating both training and validation accuracies" không thể hiện được hai đại lượng khác nhau nên mất đúng thông tin cần so sánh. "A bar chart comparing training and validation accuracies" hợp để so sánh vài con số cuối cùng, nhưng không cho thấy diễn biến liên tục qua các epoch. "A scatter plot showing individual data points" dùng để xem phân bố của từng mẫu dữ liệu, không phải để theo dõi đường học của mô hình.
A224×224
B256×256
C299×299
D331×331
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "299×299". InceptionV3 được thiết kế và huấn luyện trên ImageNet với ảnh đầu vào 299×299×3, nên khi gọi tf.keras.applications.InceptionV3 với include_top=True, input_shape mặc định là (299, 299, 3); khi dùng làm mô hình nền cho transfer learning, ta thường resize ảnh về đúng kích thước này và chuẩn hoá bằng hàm preprocess_input đi kèm. "224×224" sai vì đây là kích thước chuẩn của các mạng khác như VGG16, ResNet50 hay MobileNet chứ không phải InceptionV3. "256×256" sai vì đó thường là kích thước ảnh được thu nhỏ trước khi cắt giữa lấy vùng 224 trong quy trình tiền xử lý ImageNet kinh điển, không phải đầu vào của InceptionV3. "331×331" sai vì đó là kích thước đầu vào của NASNetLarge, một kiến trúc lớn hơn trong cùng bộ tf.keras.applications.
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
Mở trang câu hỏi này →Đá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ử.
ATokenizing text into subword units for language modeling
BTokenizing multilingual text with different scripts
CTokenizing text into individual words based on whitespaces
DTokenizing text based on learned subword units for WordPiece models
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Tokenizing multilingual text with different scripts". SplitMergeTokenizer trong TensorFlow Text tách văn bản dựa trên nhãn split/merge gán cho từng ký tự: nhãn cho biết ký tự đó bắt đầu một token mới hay được gộp vào token trước, nên nó hữu ích với các hệ chữ không dùng khoảng trắng giữa các từ như tiếng Trung hay tiếng Nhật, nơi một văn bản đa ngôn ngữ có thể trộn nhiều kiểu chữ. "Tokenizing text into subword units for language modeling" là việc của các bộ tách đơn vị dưới từ như SentencepieceTokenizer, còn SplitMergeTokenizer không tự tạo đơn vị dưới từ. "Tokenizing text into individual words based on whitespaces" là chức năng của WhitespaceTokenizer, trong khi điểm mạnh của SplitMergeTokenizer chính là không phụ thuộc khoảng trắng. "Tokenizing text based on learned subword units for WordPiece models" mô tả WordpieceTokenizer, vốn dùng một bộ từ vựng WordPiece đã học sẵn chứ không dựa vào nhãn split/merge từng ký tự.
10What does the term "sequence length" refer to in the context of text-to-sequence conversion?4 lựa chọn
AThe length of each word in a document
BThe number of words in a sentence or document
CThe size of the vocabulary
DThe embedding dimension of the vectors
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "The number of words in a sentence or document". Khi chuyển văn bản thành chuỗi số bằng Tokenizer và texts_to_sequences, mỗi từ được thay bằng một chỉ số nguyên, nên độ dài chuỗi (sequence length) chính là số token, tức số từ trong câu hay văn bản; vì các câu dài ngắn khác nhau, ta dùng pad_sequences với maxlen để đệm hoặc cắt cho mọi chuỗi cùng độ dài trước khi đưa vào mạng. "The length of each word in a document" sai vì đó là số ký tự trong một từ, trong khi một từ chỉ ứng với một chỉ số duy nhất trong chuỗi. "The size of the vocabulary" sai vì kích thước từ vựng là số từ khác nhau mà Tokenizer quản lý (giới hạn bằng num_words), không phụ thuộc độ dài từng câu. "The embedding dimension of the vectors" sai vì đó là số chiều của vector biểu diễn mỗi từ, đặt bằng output_dim của lớp Embedding, không phải số từ trong chuỗi.
11How does increasing the size of the training dataset contribute to preventing overfitting?4 lựa chọn
AIt has no impact on overfitting.
BIt increases the risk of overfitting.
CIt helps the model generalize better to new data.
DIt makes the model more prone to memorizing noise.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It helps the model generalize better to new data.". Overfitting (quá khớp) xảy ra khi mô hình học thuộc cả nhiễu và chi tiết ngẫu nhiên của tập huấn luyện nhỏ thay vì quy luật chung; khi có nhiều mẫu hơn, các đặc điểm ngẫu nhiên khó lặp lại nhất quán nên mô hình buộc phải nắm mẫu hình thật sự, nhờ đó khả năng generalization (tổng quát hoá) lên dữ liệu chưa thấy tăng. Đây cũng là lý do data augmentation (tăng cường dữ liệu) được dùng như cách "tạo thêm" dữ liệu. "It has no impact on overfitting." sai vì kích thước dữ liệu là một trong những yếu tố tác động mạnh nhất tới quá khớp. "It increases the risk of overfitting." sai vì đi ngược cơ chế: nhiều dữ liệu hơn làm giảm, không làm tăng, rủi ro quá khớp. "It makes the model more prone to memorizing noise." sai vì nhiễu ngẫu nhiên bị pha loãng bởi lượng mẫu lớn, mô hình khó ghi nhớ nhiễu hơn chứ không dễ hơn.
AImage classification
BNamed entity recognition
CText categorization
DSpeech synthesis
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Text categorization". Sentiment analysis (phân tích cảm xúc) nhận một đoạn văn bản và gán cho nó một nhãn như tích cực, tiêu cực hoặc trung tính, tức là một bài toán phân loại văn bản; trong Keras thường dựng bằng Embedding, một lớp tổng hợp như GlobalAveragePooling1D hoặc LSTM, rồi một lớp Dense với sigmoid cho hai lớp hoặc softmax cho nhiều lớp. "Image classification" cũng là phân loại nhưng đầu vào là ảnh, không phải chuỗi từ. "Named entity recognition" (nhận dạng thực thể có tên) gán nhãn cho từng token như tên người, địa điểm, tổ chức, tức là gán nhãn chuỗi chứ không phải gán một nhãn cảm xúc cho cả văn bản. "Speech synthesis" (tổng hợp giọng nói) biến văn bản thành âm thanh, là bài toán sinh dữ liệu chứ không phải phân loại.
13In a multiclass classification problem, how are categorical labels typically represented in TensorFlow?4 lựa chọn
AAs strings
BAs integer values
CUsing one-hot encoding
DUsing floating-point numbers
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Using one-hot encoding". Với bài toán phân loại nhiều lớp, nhãn thường được biểu diễn bằng one-hot encoding (mã hoá một-nóng): mỗi nhãn là vector dài bằng số lớp, vị trí của lớp đúng bằng 1, còn lại bằng 0, tạo bằng tf.keras.utils.to_categorical hoặc label_mode='categorical'; dạng này khớp với đầu ra softmax và hàm mất mát categorical_crossentropy. "As integer values" chỉ hợp khi dùng sparse_categorical_crossentropy, đó là một biến thể tiết kiệm bộ nhớ chứ không phải cách biểu diễn được hỏi ở đây, và số nguyên đứng một mình dễ khiến mô hình hiểu nhầm là có thứ tự giữa các lớp. "As strings" sai vì mạng nơ-ron chỉ tính toán trên số, nhãn chữ phải được chuyển đổi (ví dụ qua StringLookup) trước khi huấn luyện. "Using floating-point numbers" sai vì một số thực đơn lẻ biểu diễn đại lượng liên tục như bài toán hồi quy, không mô tả được việc thuộc về một trong nhiều lớp rời rạc.
AUse the 'horizontal_flip' parameter
BUse the 'flip' parameter and set 'horizontal'
CUse the 'flip_vertical' parameter around the Y axis
DUse the 'flip' parameter
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Use the 'horizontal_flip' parameter". Trong ImageDataGenerator của Keras, tham số horizontal_flip=True lật ngẫu nhiên ảnh theo chiều ngang (lấy trục dọc làm gương), biến người quay mặt sang trái thành người quay mặt sang phải; nhờ vậy mô hình thấy cả hai hướng dù dữ liệu gốc chỉ có một hướng, giảm overfitting (quá khớp) vào hướng mặt. "Use the 'flip' parameter and set 'horizontal'" sai vì ImageDataGenerator không có tham số flip nhận giá trị 'horizontal'; chuỗi "horizontal" chỉ xuất hiện ở lớp RandomFlip mới hơn chứ không phải cách viết này. "Use the 'flip_vertical' parameter around the Y axis" sai vì không có tham số tên flip_vertical, và lật dọc (vertical_flip) đảo trên dưới, biến người thành lộn ngược chứ không đổi hướng trái phải. "Use the 'flip' parameter" sai vì ImageDataGenerator không có tham số flip chung; phải chỉ rõ horizontal_flip hoặc vertical_flip.
15When creating a windowed dataset for time series prediction, what does the target window represent?4 lựa chọn
AThe window before the input window
BThe window after the input window
CThe window at the same time as the input window
DThe entire time series without windowing
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "The window after the input window". Khi dựng windowed dataset (tập dữ liệu chia cửa sổ) cho dự báo chuỗi thời gian, ta lấy một đoạn liên tiếp các giá trị quá khứ làm đặc trưng đầu vào và giá trị hoặc đoạn giá trị ngay sau nó làm nhãn, vì mô hình phải học cách đoán tương lai từ quá khứ; trong tf.data thường dùng window với kích thước window_size + 1 rồi map để tách phần đầu làm đầu vào và phần tử cuối làm nhãn. "The window before the input window" đảo ngược chiều thời gian, khiến mô hình học suy ngược quá khứ thay vì dự báo. "The window at the same time as the input window" làm nhãn trùng với chính đầu vào, mô hình chỉ cần chép lại nên không học được gì về dự báo. "The entire time series without windowing" không tạo ra được cặp đầu vào và nhãn nào, nên không có mục tiêu để huấn luyện có giám sát.
ACopying and pasting code from one project to another
BTraining a model on a specific task and then using it as a starting point for a different but related task
CMoving data from one storage location to another
DAdjusting the brightness and contrast of images during preprocessing
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Training a model on a specific task and then using it as a starting point for a different but related task". Trong thị giác máy tính, transfer learning (học chuyển giao) lấy một mạng tích chập đã học trên tập lớn như ImageNet, ví dụ MobileNetV2 hay InceptionV3 trong tf.keras.applications, đóng băng các lớp tích chập đã học đặc trưng tổng quát rồi thêm và huấn luyện lớp phân loại mới, có thể fine-tune (tinh chỉnh) vài lớp trên cùng cho bài toán mới. "Copying and pasting code from one project to another" sai vì thứ được chuyển giao là trọng số và đặc trưng đã học, không phải mã nguồn. "Moving data from one storage location to another" sai vì đó là thao tác di chuyển dữ liệu thuần tuý, không có mô hình nào học gì. "Adjusting the brightness and contrast of images during preprocessing" sai vì đó là tiền xử lý hoặc tăng cường dữ liệu (data augmentation), giúp đa dạng tập huấn luyện chứ không tái sử dụng tri thức của mô hình khác.
ATokenizing based on whitespace
BTokenizing using pre-trained models from TensorFlow Hub
CTokenizing using Sentencepiece
DTokenizing by splitting and merging text
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Tokenizing by splitting and merging text". SplitMergeTokenizer trong thư viện TensorFlow Text nhận chuỗi kèm một dãy nhãn cho từng ký tự cho biết ký tự đó bắt đầu một token mới (split) hay được nối vào token đang dựng (merge); cách này hợp với các ngôn ngữ không dùng khoảng trắng như tiếng Trung, khi nhãn tách/gộp đến từ một mô hình phân đoạn. "Tokenizing based on whitespace" sai vì đó là việc của WhitespaceTokenizer, chỉ cắt tại khoảng trắng. "Tokenizing using pre-trained models from TensorFlow Hub" sai vì việc dùng mô hình phân đoạn tải từ TensorFlow Hub thuộc về HubModuleTokenizer, không phải SplitMergeTokenizer. "Tokenizing using Sentencepiece" sai vì đó là SentencepieceTokenizer, chia văn bản thành đơn vị subword (từ con) theo mô hình SentencePiece đã huấn luyện.
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
Mở trang câu hỏi này →Đá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.
19Which type of padding preserves the spatial dimensions of the input in a convolutional layer?4 lựa chọn
AZero padding
BSame padding
CValid padding
DSymmetric padding
Lời giải
Mở trang câu hỏi này →Đá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.
AIt drops neurons during training to prevent overfitting.
BIt adjusts the learning rate dynamically.
CIt adds random noise to the input data.
DIt reduces the spatial dimensions of the input.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It drops neurons during training to prevent overfitting.". Lớp Dropout(rate) trong Keras, ở mỗi bước huấn luyện, đặt ngẫu nhiên một tỉ lệ rate đơn vị đầu ra về 0 và phóng to phần còn lại theo hệ số 1/(1 − rate); mạng không thể dựa vào vài nơ-ron cố định nên học đặc trưng dư thừa, bền hơn, giảm overfitting (quá khớp). Khi suy luận Dropout tự tắt. "It adjusts the learning rate dynamically." sai vì điều chỉnh learning rate (tốc độ học) là việc của bộ tối ưu như Adam hoặc callback như ReduceLROnPlateau, không phải một lớp trong mạng. "It adds random noise to the input data." sai vì thêm nhiễu cộng vào dữ liệu là lớp GaussianNoise; Dropout nhân với mặt nạ 0/1 chứ không cộng nhiễu. "It reduces the spatial dimensions of the input." sai vì giảm kích thước không gian là việc của lớp pooling như MaxPooling2D hoặc tích chập có stride; Dropout giữ nguyên shape.