PyTorch là 1 thư viện Python-based hỗ trợ tạo ra các Deep Learning models và sử dụng chúng cho các ứng dụng khác nhau. Trên thực tế, PyTorch không chỉ là 1 thư viện Deep Learning, mà chính là 1 package về tính toán khoa học [scientific computing] như tài liệu chính thức của PyTorch đã đề cập: It’s a Python-based scientific computing package targeted at two sets of audiences: PyTorch, tương tự như Python, nó được thiết kế tập trung vào tính dễ sử dụng và thậm chí người dùng có kiến thức lập trình rất cơ bản cũng có thể sử dụng nó trong các dự án có liên quan đến Deep Learning. Cấu trúc dữ liệu cốt lõi được sử dụng trong PyTorch là Tensor. Tương tự numpy array, Tensor là 1 mảng n-chiều với các phần tử có cùng kiểu dữ liệu. Hiện nay có rất nhiều thư viện về Deep Learning đã được phát hành, ngoài PyTorch, chúng ta có thể kể đến nhiều cái tên phổ biến như Caffe, TensorFlow, Theano [đã R.I.P],... Vậy điều gì khiến cho PyTorch trở nên khác biệt với những thư viện còn lại? Để được xem 1 thư viện Deep Learning lý tưởng, nó phải có tính dễ học và dễ sử dụng, đủ linh hoạt để sử dụng trong các ứng dụng khác nhau, hiệu quả để chúng ta có thể xử lý các bộ dữ liệu thực tế lớn và đủ chính xác để cung cấp kết quả chính xác ngay cả khi không chắc chắn về dữ liệu đầu vào. PyTorch được đánh giá là có thể đáp ứng rất tốt các metrics nêu trên. Phong cách code của PyTorch mang tính "rất Python", giúp những ai đã học qua Python đều sẽ dễ dàng tìm hiểu và sử dụng. Bên cạnh đó, PyTorch còn sỡ hữu khả năng tính toán với GPU, mang lại hiệu năng tính toán cao. Ngoài ra, nếu bạn nghi ngờ về hiệu năng của PyTorch vì nó dựa trên Python, thì nên lưu ý rằng phần core của PyTorch [libtorch] được viết bằng C++ [high-performance C++ API]. Điều này còn làm cho quá trình chuyển đổi từ R&D sang Production dễ dàng hơn. Chúng ta đã điểm qua những điều làm cho PyTorch trở nên khác biệt. Và bây giờ, hãy cùng xem xét pipeline cơ bản của 1 dự án PyTorch. Hình dưới đây mô tả một quy trình công việc điển hình cùng với các modules quan trọng được liên kết với mỗi bước. Các modules cơ bản mà chúng ta sẽ đề cập trong bài viết này là torch.nn, torch.optim, torch.utils và torch.autograd. Đây luôn là một trong những bước đầu tiên trong bất kì một project về Deep Learning nào. Vì thế PyTorch đã hỗ trợ các tiện ích để thực hiện bước này với module torch.utils.data. 2 class quan trọng trong module này là Dataset và DataLoader: Chúng ta cũng có thể sử dụng torch.nn.DataParallel và torch.distribution trong trường hợp có thể sử dụng song song nhiều máy tính hoặc nhiều GPUs. Module torch.nn được sử dụng để tạo Neural Network. Nó cung cấp tất cả các Neural Network layers phổ biến như các fully connected layers, convolutional layers, các hàm activation và hàm loss, v.v. Một khi kiến trúc mạng đã được tạo ra và dữ liệu đã sẵn sàng để được feed cho mạng, chúng ta sẽ cần các kỹ thuật để cập nhật các trọng số [weights] và độ lệch [biases] để mạng tiến hành quá trình learning. Các tiện ích này được cung cấp trong module torch.optim. Còn để tính gradient tự động, chúng ta sử dụng module torch.autograd. Sau khi model đã được train, nó có thể được sử dụng để dự đoán output cho các test cases hoặc thậm chí các datasets mới. Quá trình này được gọi là model inference. PyTorch cũng cung cấp TorchScript có thể được sử dụng để chạy các model độc lập với Python runtime. Đây có thể được coi là một Máy ảo được thiết kế chủ yếu dành riêng cho việc thao tác với Tensors. Chúng ta cũng có thể convert model được train bằng PyTorch sang các định dạng như ONNX, cho phép bạn sử dụng các model này trong các Deep Learning framework khác như MXNet, CNTK, Caffe2. Bạn cũng có thể chuyển đổi các model ONNX sang TensorFlow.
1. A replacement for NumPy to use the power of GPUs
2. A deep learning research platform that provides maximum flexibility and speedTại sao nên học PyTorch?
Tổng quan về PyTorch
Load và xử lí data
Xây dựng Neural Network
Model Inference & Compability
Làm việc với Tensor
Như đã đề cập ở đầu bài viết, Tensor là 1 mảng n-chiều với các phần tử có cùng kiểu dữ liệu tương tự numpy array. Để hiểu và sử dụng PyTorch Tensors rất dễ dàng.
Ví dụ, một giá trị vô hướng được biểu diễn bằng một Tensor 0 chiều. Tương tự để biểu diễn 1 vector ta sẽ sử dụng thang đo 1 chiều, v.v. Một số ví dụ về các Tensor với các kích thước khác nhau được hiển thị bên dưới sẽ giúp bạn dễ hình dung hơn.
Trước khi bắt đầu sử dụng PyTorch với Tensor, hãy cài đặt PyTorch 1.1.0 với hướng dẫn cụ thể theo các option khác nhau tại đây. Hoặc tiện hơn bạn có thể sử dụng Google Colab vốn đã được cài sẵn PyTorch. Trong giao diện Colab, bạn có thể mở notebook setting để chuyển runtime sang chế độ sử dụng GPU.
Khởi tạo Tensor
Dưới đây là một số cách khởi tạo Tensor cơ bản. Đầu tiên, ta cần import thư viện PyTorch
Qua những cách trên, chúng ta đã tạo ra các vector [Tensor 1 chiều]. Bây giờ ta sẽ thử tạo ra các Tensor nhiều chiều hơn.
Kiểm tra thông tin về chiều của Tensor với thuộc tính .shape
Truy xuất phần tử của Tensor
Truy xuất phần tử từ 1 vector [Tensor 1 chiều]
Truy xuất phần tử từ Tensor nhiều chiều
PyTorch Tensor cũng hỗ trợ slicing tương tự như numpy array
Chỉ định kiểu dữ liệu cho các phần tử của Tensor
Một khi chúng ta tạo một Tensor, PyTorch quyết định kiểu dữ liệu cho các phần tử của Tensor sao cho kiểu dữ liệu có thể được áp dụng cho tất cả các phần tử của Tensor. Chúng ta có thể override điều này bằng cách chỉ định kiểu dữ liệu khi tạo Tensor.
Convert PyTorch Tensor sang numpy array và ngược lại
Như chúng ta đã để cập thì Tensor trong PyTorch cũng tương tự như numpy array. Do đó ta hoàn toàn có thể convert cái này sang cái kia.
Các phép toán số học với Tensor
Tài liệu tham khảo
Lược dịch từ bài viết Introduction to PyTorch