Mọi điều cần biết về PyTorch

Kể từ khi được nhóm Facebook AI Research (FAIR) thành lập vào năm 2017, PyTorch đã trở thành một framework cực kỳ phổ biến và hiệu quả để tạo mô hình Deep Learning (DL). Thư viện Machine Learning mã nguồn mở này dựa trên Torch và được thiết kế để cung cấp tính linh hoạt cao hơn, tăng tốc độ cho việc triển khai Deep Neural Network (mạng nơ-ron sâu). Hiện tại, PyTorch là thư viện được các nhà nghiên cứu và học viên AI (Trí tuệ nhân tạo) trên toàn thế giới ưa chuộng nhất trong ngành và học viện.

PyTorch là gì và nó hoạt động như thế nào?

PyTorch là một thư viện tensor Deep Learning được tối ưu hóa dựa trên Python và Torch, chủ yếu được sử dụng cho các ứng dụng sử dụng GPUCPU. PyTorch được ưa chuộng hơn các nền tảng Deep Learning khác như TensorFlow và Keras, vì nó sử dụng đồ thị tính toán động và hoàn toàn theo Python. Nó cho phép những nhà khoa học, nhà phát triển và trình gỡ lỗi mạng nơ-ron chạy và kiểm tra các phần của code theo thời gian thực. Do đó, người dùng không phải đợi toàn bộ code được triển khai để kiểm tra xem một phần của code có hoạt động hay không.

Hai tính năng chính của PyTorch là:

  • Tính toán Tensor (tương tự như NumPy) với hỗ trợ tăng tốc GPU mạnh mẽ
  • Phân biệt tự động để tạo và đào tạo mạng nơ-ron sâu

Những điều cơ bản về PyTorch

Các hoạt động cơ bản của PyTorch khá giống với Numpy. Trước tiên, hãy cùng tìm hiểu những điều cơ bản.

Giới thiệu về Tensor

Trong Machine Learning, khi biểu diễn dữ liệu, chúng ta cần thực hiện điều đó theo dạng số. Tensor chỉ đơn giản là một container có thể chứa dữ liệu ở nhiều chiều. Tuy nhiên, theo thuật ngữ toán học, tensor là một đơn vị dữ liệu cơ bản có thể được sử dụng làm nền tảng cho các hoạt động toán học nâng cao. Có thể là số, vectơ, ma trận hoặc mảng đa chiều như mảng Numpy. CPU hoặc GPU cũng có thể xử lý Tensor để thực hiện các phép toán nhanh hơn. Có nhiều loại Tensor như Float Tensor, Double Tensor, Half Tensor, Int Tensor và Long Tensor, nhưng PyTorch sử dụng Float Tensor 32 bit làm kiểu mặc định.

Các phép toán

Code để thực hiện các phép toán trong PyTorch giống như trong Numpy. Người dùng cần khởi tạo 2 tensor rồi thực hiện các phép toán như cộng, trừ, nhân và chia trên chúng.

Khởi tạo ma trận và các phép toán ma trận

Để khởi tạo ma trận bằng các số ngẫu nhiên trong PyTorch, hãy sử dụng hàm randn() cung cấp một tensor chứa những số ngẫu nhiên từ phân phối chuẩn. Đặt seed ngẫu nhiên ở đầu sẽ tạo ra các số giống nhau mỗi khi bạn chạy code này. Các phép toán ma trận cơ bản và phép toán chuyển vị trong PyTorch cũng tương tự như NumPy.

Các mô-đun PyTorch phổ biến

Trong PyTorch, các mô-đun được sử dụng để biểu diễn mạng nơ-ron.

Autograd

Mô-đun autograd là công cụ phân biệt tự động của PyTorch giúp tính toán các gradient trong quá trình truyền tiến theo thời gian nhanh chóng. Autograd tạo ra một đồ thị phi chu trình có hướng, trong đó các leaves là tensor đầu vào và các root là tensor đầu ra.

Optim

Mô-đun Optim là một gói có các thuật toán được viết sẵn cho những trình tối ưu hóa có thể được sử dụng để xây dựng mạng nơ-ron.

nn

Mô-đun nn bao gồm nhiều lớp khác nhau giúp xây dựng các mô hình mạng nơ-ron. Tất cả các mô-đun trong PyTorch đều là lớp con của mô-đun nn.

Đồ thị tính toán động

Đồ thị tính toán trong PyTorch cho phép framework tính toán các giá trị gradient cho những mạng nơ-ron được xây dựng. PyTorch sử dụng đồ thị tính toán động. Đồ thị được xác định gián tiếp bằng cách sử dụng operator overloading (nạp chồng toán tử), trong khi quá trình tính toán tiến được thực thi. Đồ thị động linh hoạt hơn đồ thị tĩnh, trong đó người dùng có thể tạo cấu trúc xen kẽ và định giá đồ thị. Những đồ thị này thân thiện với việc gỡ lỗi vì nó cho phép thực thi code từng dòng. Tìm ra các vấn đề trong code dễ hơn nhiều với PyTorch Dynamic Graphs - một tính năng quan trọng khiến PyTorch trở thành lựa chọn được ưa chuộng trong ngành.

Đồ thị tính toán trong PyTorch được xây dựng lại từ đầu ở mỗi lần lặp, cho phép sử dụng các câu lệnh luồng điều khiển Python ngẫu nhiên, có thể tác động đến hình dạng và kích thước tổng thể của đồ thị mỗi khi xảy ra một lần lặp. Ưu điểm là – không cần phải mã hóa tất cả các đường dẫn có thể trước khi khởi chạy đào tạo.

Data Loader

Làm việc với các tập dữ liệu lớn đòi hỏi phải load tất cả dữ liệu vào bộ nhớ cùng một lúc. Điều này gây ra tình trạng hết bộ nhớ và các chương trình chạy chậm. Bên cạnh đó, rất khó để duy trì code xử lý mẫu dữ liệu. PyTorch cung cấp hai nguyên mẫu dữ liệu - DataLoader và Dataset - để song song hóa việc load dữ liệu với việc xử lý hàng loạt tự động, khả năng đọc và mô-đun hóa code tốt hơn. Dataset và DataLoader cho phép người dùng sử dụng dữ liệu của riêng họ cũng như các tập dữ liệu được load trước. Trong khi Dataset chứa các mẫu và nhãn tương ứng, DataLoader kết hợp dataset và sampler, triển khai một iterable xung quanh Dataset để người dùng có thể dễ dàng truy cập các mẫu.

Giải quyết vấn đề phân loại hình ảnh bằng PyTorch

Bạn đã từng xây dựng mạng nơ-ron từ đầu trong PyTorch chưa? Nếu chưa, thì hướng dẫn này dành cho bạn.

  • Bước 1 – Khởi tạo đầu vào và đầu ra bằng tensor.
  • Bước 2 – Xác định hàm sigmoid sẽ hoạt động như một hàm kích hoạt. Sử dụng đạo hàm của hàm sigmoid cho bước truyền ngược.
  • Bước 3 – Khởi tạo các tham số như số epoch (lần duyệt qua toàn bộ tập dữ liệu đào tạo), trọng số, độ lệch, tốc độ học, v.v..., bằng hàm randn(). Như vậy là hoàn tất việc tạo mạng nơ-ron đơn giản bao gồm một lớp ẩn duy nhất, một lớp đầu vào và một lớp đầu ra.

Bước truyền tiến được sử dụng để tính toán đầu ra, trong khi bước truyền ngược được sử dụng để tính toán lỗi. Lỗi được sử dụng để cập nhật trọng số và độ lệch.

Tiếp theo, chúng ta có mô hình mạng nơ-ron cuối cùng dựa trên một nghiên cứu tình huống thực tế, trong đó framework PyTorch giúp tạo ra một mô hình Deep Learning.

Nhiệm vụ trong tầm tay là một bài toán phân loại hình ảnh, trong đó chúng ta tìm ra loại trang phục bằng cách xem các hình ảnh trang phục khác nhau.

Bước 1 – Phân loại hình ảnh trang phục thành các lớp khác nhau

Có hai thư mục trong tập dữ liệu – một thư mục dành cho tập huấn luyện và thư mục còn lại dành cho tập kiểm tra. Mỗi thư mục chứa file .csv có id của bất kỳ hình ảnh nào và tên nhãn tương ứng. Một thư mục khác chứa các hình ảnh của tập cụ thể.

Bước 2 – Load dữ liệu

Nhập các thư viện cần thiết rồi đọc file .csv. Vẽ một hình ảnh được chọn ngẫu nhiên để hiểu rõ hơn về giao diện của dữ liệu. Load tất cả hình ảnh huấn luyện bằng file train.csv.

Bước 3 – Huấn luyện mô hình

Xây dựng một tập xác thực để kiểm tra hiệu suất của mô hình trên dữ liệu chưa biết. Xác định mô hình bằng gói import torch và các mô-đun cần thiết. Xác định các tham số như số lượng nơ-ron, epoch và tốc độ học. Xây dựng mô hình rồi huấn luyện mô hình trong một số epoch cụ thể. Lưu lại mất mát đào tạo và xác thực của mỗi epoch - biểu đồ, mất mát đào tạo và xác thực, để kiểm tra xem chúng có đồng bộ không.

Bước 4 – Nhận dự đoán

Cuối cùng, load hình ảnh thử nghiệm, đưa ra dự đoán và gửi dự đoán. Sau khi dự đoán được gửi, hãy sử dụng tỷ lệ phần trăm độ chính xác làm chuẩn để thử và cải thiện bằng cách thay đổi các tham số khác nhau của mô hình.

Tóm lại, PyTorch là một framework Deep Learning thiết yếu và là lựa chọn tuyệt vời cho framework Deep Learning đầu tiên để học. Nếu bạn quan tâm đến thị giác máy tính và Deep Learning, hãy xem hướng dẫn về các ứng dụng Deep Learning và Neural Network.

Thứ Sáu, 21/02/2025 10:28
31 👨 140
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖
    Chia sẻ
    Chia sẻ FacebookChia sẻ Twitter
    Đóng