Nội dung bài viết
© 2025 AI VIET NAM. All rights reserved.
Tác giả: AI VIET NAM (AI VIET NAM)
Keywords: squeeze tensor, mất chiều PyTorch, xử lý time series, unsqueeze, lỗi shape
Trong quá trình làm việc với chuỗi thời gian bằng PyTorch, rất nhiều bạn gặp lỗi shape, đặc biệt là khi đưa dữ liệu qua các layer như LSTM, GRU hoặc mô hình tuyến tính.
Một nguyên nhân quen thuộc là việc dùng
squeeze()Expected 3D input, got 2D tensorDimension mismatchBatch dimension lostVấn đề không nằm ở thư viện, mà ở cách
squeeze()Chuỗi thời gian khi đưa vào mô hình DL thường có dạng:
(batch_size, sequence_length, feature_dim)Hoặc đôi khi là:
(batch_size, feature_dim)Nếu dữ liệu chỉ có 1 feature, hoặc
batch_size = 1sequence_length = 1squeeze()squeeze()squeeze()squeeze()Khi đó shape không còn phù hợp với mô hình, đặc biệt trong nhóm kiến thức Deep Learning 1 – Layer inputs/outputs (Module 7) nơi các kiến trúc luôn yêu cầu shape nhất định.
Thói quen nhiều bạn là "squeeze trước – unsqueeze sau".
Cách an toàn hơn là không squeeze, chỉ bổ sung chiều còn thiếu bằng
unsqueeze(dim)Điều này giúp bạn chủ động xác định:
Thay vì:
tensor.squeeze()Hãy dùng:
tensor.squeeze(dim)Khi đó chỉ chiều bạn chọn mới bị xóa, giảm rủi ro sai shape.
Trong pipeline dự án thực tế (đặc biệt khi làm MLOps mini-pipeline ở các module ML/DL), việc in ra shape qua từng bước giúp tránh lỗi từ đầu.
Một cách quen thuộc:
Với mô hình LSTM/GRU/CNN-OneD:
(batch, seq_len, features)Giữ nguyên cấu trúc này xuyên suốt giúp việc xử lý ổn định hơn.
Ngay cả khi
batch = 1feature = 1Giả sử bạn đang làm bài dự báo nhu cầu theo giờ trong một hệ thống bán lẻ – dạng bài toán thường gặp trong Machine Learning (Module 4) và Pre-Deep Learning (Module 5).
Trong tuần đầu, bạn chỉ có 1 cửa hàng →
batch_size = 1(1, 24, 1)(24,)Khi triển khai mô hình LSTM, yêu cầu shape 3 chiều, và bạn gặp lỗi:
Expected input of shape (batch, seq_len, feature)Got (24,)Việc dùng squeeze “tự do” làm mất luôn chiều batch và feature.
Thay vào đó, chỉ nên reshape hoặc unsqueeze đúng vị trí cần thiết.
Trong các dự án có pipeline dài, việc mất chiều ở một bước nhỏ có thể gây lỗi ở nhiều bước phía sau:
Đây là lý do trong nhóm kiến thức nền tảng, các module từ Python/Numpy (Module 1–2) đến DL (Module 7) đều nhấn mạnh sự ổn định của shape tensor.
Khi làm mô hình dự báo chuỗi thời gian, việc quản lý shape ổn định tương tự như việc quản lý schema trong ETL của Module 3 – chỉ cần lệch một cột hoặc thiếu một chiều là pipeline có thể dừng.
squeeze()unsqueeze(dim)Bạn có thể bắt đầu bằng các bài dự báo nhỏ để quan sát rõ hơn việc dữ liệu thay đổi thế nào qua từng bước xử lý.
Q1: Dùng squeeze() có xóa nhiều chiều cùng lúc không?
A: Có, nếu nhiều chiều có kích thước 1.
Q2: Có nên squeeze dữ liệu trước khi đưa vào LSTM?
A: Không nên, vì LSTM cần đủ 3 chiều chuẩn.
Q3: Dùng unsqueeze() có an toàn hơn không?
A: Có, vì bạn chủ động chọn chính xác vị trí thêm chiều.
Q4: Có cần kiểm tra shape trước khi dự đoán không?
A: Có, để đảm bảo mô hình nhận đúng dạng đầu vào.
Q: Mình con số 0 thì học nổi không?
A: Chỉ cần có thời gian học mỗi ngày. Kiến thức và tài liệu team admin lo.
Q: Ai dạy AIO?
A: Toàn bộ admin AIO trực tiếp dạy và hỗ trợ trong suốt hành trình.
Q: Admin có “xịn” không?
A: Admin đều là người làm nghề thật. Không dám nói xịn, chỉ dạy bằng hết sức mình.
Q: AIO khác gì trung tâm khác?
A: AIO không phải trung tâm. Đây là dự án học tập cộng đồng với tinh thần “Cùng nhau học – cùng nhau khổ – cùng nhau lớn”.