Trang chủ / Tài nguyên
Tài nguyên
Cheat sheet PyTorch: tensor, lớp mạng, huấn luyện, xuất mô hình
Tra cứu nhanh tensor, GPU, lớp mạng, hàm mất mát, vòng lặp huấn luyện, lưu tải mô hình và các lỗi hay gặp.
Nội dung bài viết Tensor GPU Lớp mạng thường dùng Hàm mất mát và bộ tối ưu Vòng lặp huấn luyện tối thiểu Dữ liệu Lưu, tải và xuất Lỗi hay gặp
Trang tra cứu nhanh các lệnh PyTorch thường dùng khi huấn luyện và triển khai mô hình thị giác máy. Giả định đã có import torch, from torch import nn.
Tensor
Việc cần làm Code
Tạo tensor torch.tensor([1, 2]), torch.zeros(2, 3), torch.randn(8, 3, 224, 224)
Từ / sang NumPy torch.from_numpy(arr) / t.cpu().numpy()
Kích thước, kiểu, thiết bị t.shape, t.dtype, t.device
Đổi hình dạng t.view(8, -1), t.reshape(...), t.flatten(1)
Đổi thứ tự chiều HWC → CHW t.permute(2, 0, 1)
Thêm / bỏ chiều t.unsqueeze(0) / t.squeeze()
Ghép torch.cat([a, b], dim=0), torch.stack([a, b])
GPU
Việc cần làm Code
Kiểm tra GPU torch.cuda.is_available(), torch.cuda.get_device_name(0)
Chọn thiết bị device = "cuda" if torch.cuda.is_available() else "cpu"
Chuyển mô hình, dữ liệu model.to(device), x.to(device)
Bộ nhớ GPU đang dùng torch.cuda.memory_allocated() / 1e9 (GB)
Lớp mạng thường dùng
Lớp Ghi chú
nn.Conv2d(cin, cout, k, stride, padding)Tích chập 2D
nn.BatchNorm2d(c), nn.ReLU()Chuẩn hóa, kích hoạt
nn.MaxPool2d(2), nn.AdaptiveAvgPool2d(1)Giảm kích thước
nn.Linear(in, out)Lớp kết nối đầy đủ
nn.Dropout(0.3)Chống overfitting
nn.Sequential(...)Ghép các lớp nối tiếp
Hàm mất mát và bộ tối ưu
Bài toán Hàm mất mát
Phân loại nhiều lớp nn.CrossEntropyLoss() (đầu vào là logits, chưa softmax)
Nhị phân / đa nhãn / mặt nạ nn.BCEWithLogitsLoss()
Hồi quy nn.MSELoss(), nn.SmoothL1Loss()
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-4)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=epochs)
Vòng lặp huấn luyện tối thiểu
for epoch in range(epochs):
model.train()
for x, y in train_loader:
x, y = x.to(device), y.to(device)
optimizer.zero_grad()
loss = criterion(model(x), y)
loss.backward()
optimizer.step()
scheduler.step()
model.eval()
with torch.no_grad():
... # đánh giá trên tập validation
Dữ liệu
Việc cần làm Code
Thư mục ảnh theo lớp torchvision.datasets.ImageFolder("data/train", transform)
DataLoader DataLoader(ds, batch_size=32, shuffle=True, num_workers=4)
Biến đổi ảnh transforms.Compose([transforms.Resize((224, 224)), transforms.ToTensor()])
Lưu, tải và xuất
Việc cần làm Code
Lưu trọng số torch.save(model.state_dict(), "model.pt")
Tải trọng số model.load_state_dict(torch.load("model.pt", map_location=device))
Xuất ONNX torch.onnx.export(model, dummy_input, "model.onnx", input_names=["input"], output_names=["output"])
Đếm tham số sum(p.numel() for p in model.parameters())
Lỗi hay gặp
Expected all tensors to be on the same device : quên chuyển dữ liệu hoặc mô hình sang GPU.
CUDA out of memory : giảm batch size, giảm kích thước ảnh, dùng torch.no_grad() khi đánh giá.
Kết quả khi đánh giá thay đổi bất thường : quên model.eval().
Loss không giảm : kiểm tra learning rate, nhãn có khớp ảnh không, đã gọi optimizer.zero_grad() chưa.
Bài giải thích chi tiết: PyTorch cơ bản: tensor, autograd và vòng lặp huấn luyện .
HF
Ban biên tập HọcFree
Chúng tôi viết những bài hướng dẫn dễ hiểu, thực tế để ai cũng có thể tự học lập trình và ngoại ngữ, hoàn toàn miễn phí.