July 17, 2020 Ngoc Quynh

Sự khác biệt giữa PyTorch và TensorFlow

Trong khi bắt đầu với hành trình Deep Learning, còn được gọi là Mạng nơ-ron, người ta tìm thấy một loạt các frameworks và thư viện trong Python. Do đó, đôi khi bạn sẽ bối rối không biết nên bắt đầu từ đâu và theo đuổi cái nào trước khi bước vào lĩnh vực này. Bài viết này dành cho những người đã bắt đầu hoặc sắp bắt đầu hành trình với Deep Learning.

Trong số các máy chủ của thư viện Deep Learning hoặc frameworks như: TensorFlow, Keras, Caffe, PyTorch, Microsoft Cognitive Toolkit, Apache Spark Deep Learning Pipelines, Chainer, v.v … Có một vài trong số chúng thực sự nổi bật, cụ thể là TensorFlow và PyTorch. Nhưng trước khi chúng ta đi sâu hơn vào chúng, chúng ta hãy xem qua về sự tiến hóa của chúng.

Sự phát triển

Google Brain đã xây dựng DistBelief như một hệ thống Machine Learning độc quyền dựa trên các mạng nơ-ron Deep learning vào năm 2011. TensorFlow là hệ thống thế hệ thứ hai của Google Brain. TensorFlow được phát hành lần đầu tiên vào ngày 9 tháng 11 năm 2015, nhưng phải đến năm 2017 mới ổn định. Vào tháng 3 năm 2018, Google đã công bố phiên bản TensorFlow.js 1.0 cho Machine learning bằng JavaScript. Thông báo về TensorFlow 2.0 của Google được đưa ra vào tháng 1 năm 2019 và chính thức ra mắt vào tháng 9 năm 2019.

PyTorch được phát triển bởi Phòng thí nghiệm nghiên cứu AI (FAIR) của Facebook và bản phát hành công khai đầu tiên (0.1.12) là vào tháng 5 năm 2017. Bản phát hành ổn định mới nhất (1.4) là vào tháng 1 năm 2020. Tên PyTorch được lấy cảm hứng từ framework phổ biến Torch của Deep Learning, được viết bằng ngôn ngữ lập trình Lua và được triển khai bằng Python do đó có tên PyTorch.

Đặc tính

  1. Cả TensorFlow và PyTorch đều là nguồn mở nhưng được phát triển bởi hai nhân vật khổng lồ khác nhau trong công cuộc đổi mới công nghệ: Google và Facebook và được sử dụng cho các ứng dụng Machine Learning như Mạng Nơ-ron. Nhưng, lợi thế của PyTorch so với TensorFlow nằm ở hai tính khác biệt:
  • Lập trình bắt buộc: Nói What AND How, còn lập trình khai báo nói What NOT How
  • Đồ thị tính toán động: Được xây dựng trong thời gian sử dụng cho phép dùng các câu lệnh Python tiêu chuẩn và không có sự phân biệt giữa việc xác định biểu đồ tính toán và biên dịch cho các chương trình bắt buộc.

Quan trọng: Đồ thị tĩnh hoạt động tốt cho các mạng có kích thước cố định trong khi Đồ thị động hoạt động tốt cho các mạng Động.

Trong lĩnh vực Trí tuệ nhân tạo, sự cứng nhắc được đề cập ở trên trong Mạng lưới Nơ-ron được xác định là một trở ngại lớn. Các nhà nghiên cứu muốn làm cho Mạng Nơ-ron được xác định nhiều hơn bởi mạng khi đang chạy hơn là được xác định trước hoặc trước đó. Các công cụ tồn tại sau đó không thực sự giúp họ làm như vậy.

Về điểm này, PyTorch giành chiến thắng trước TensorFlow, vì nó mang đến một framework Deep learning mang lại Mạng lưới Nơ-ron động, tức là Define by Run (một biểu đồ được tạo ra khi đang di chuyển). Điều này đặc biệt hữu ích khi nói đến đầu vào có độ dài thay đổi trong RNNs (Recurrent Neural Networks – Mạng Nơ-ron tái phát).

Các biểu đồ tính toán động được xây dựng trong thời gian chạy cho phép chúng ta sử dụng các câu lệnh Python tiêu chuẩn do đó, không có sự phân biệt giữa việc xác định biểu đồ tính toán và biên dịch cho các chương trình bắt buộc. Hơn nữa, đồ thị động làm cho việc fix bug dễ dàng hơn. Mặt khác, TensorFlow lắp ráp một biểu đồ và sử dụng một phiên để thực thi.

2. Đường cong học tập của TensorFlow dốc hơn so với PyTorch.

PyTorch:

  • Có các khả năng GPU như Numpy [và có kiểm soát CPU & GPU rõ ràng]
  • Nhiều pythonic trong tự nhiên
  • Dễ dàng xử lý bug

TensorFlow:

Mặc dù TensorFlow 2.0 đã cải thiện khá nhiều và tuyên bố rằng với sự tích hợp Keras và Thực thi Eager được bật theo chế độ mặc định, phiên bản 2.0 hoàn toàn dễ sử dụng và đơn giản. Nó cung cấp cho cả nhà phát triển mới cũng như những người có kinh nghiệm các công cụ & API cần thiết để xây dựng và triển khai các mô hình học máy của họ với tốc độ và độ chính xác với sự trợ giúp của tf.keras như API cấp cao, loại bỏ chức năng trùng lặp, cú pháp trực quan, nhất quán trên các API, API cấp thấp đầy đủ và giao diện kế thừa cho các biến, điểm kiểm tra, các layers. Điều này về cơ bản có nghĩa là người dùng phải tìm hiểu nhiều hơn một chút so với PyTorch, về bản chất là pythonic. Do đó, đường cong học tập dốc hơn cho TensorFlow.

3. TensorFlow có tài liệu tốt nhất và cộng đồng lớn hơn. Do đó, nó sẽ tốt hơn cho người mới bắt đầu. Nó phù hợp nhất cho sản xuất vì nó được xây dựng với tính toán phân tán.

Dưới đây là một vài liên kết để tham khảo:

* Cộng đồng TensorFlow: https://www.tensorflow.org/community/

* Dự án Cộng đồng TensorFlow: https://github.com/tensorflow/community

Nhiều tài nguyên, Hướng dẫn và MOOCs có sẵn cho TensorFlow hơn PyTorch. Một lý do cho điều này có thể là PyTorch tương đối mới. Hơn nữa, PyTorch phù hợp nhất cho các nhà nghiên cứu bởi vì các biểu đồ động của nó.

4. Trực quan

TensorBoard của TensorFlow cung cấp hình ảnh trực quan và công cụ cần thiết cho học máy:

  • Theo dõi số liệu và trực quan hóa như biến mất và độ chính xác
  • Mô hình đồ thị trực quan (ops và layer)
  • Xem biểu đồ về trọng lượng, độ lệch và các tensor khác khi chúng thay đổi theo thời gian
  • Nhúng vào một không gian chiếu chiều thấp hơn
  • Hiển thị hình ảnh, văn bản và dữ liệu âm thanh
  • Hồ sơ chương trình TensorFlow
  • Mặt khác, thư viện Torchvision của PyTorch chứa tất cả các bộ dữ liệu quan trọng cũng như các mô hình và hoạt động chuyển đổi thường được sử dụng trong lĩnh vực thị giác máy tính. Mặc dù không có hỗ trợ riêng để tích hợp vào TensorBoard nhưng có thể được sử dụng để trực quan hóa kết quả của các hoạt động đào tạo Mạng Nơ-ron

5. TorchScript – một tập hợp con của Python giúp triển khai các ứng dụng vào quy mô sản xuất nhưng theo kinh nghiệm người dùng phổ biến thì TensorFlow phù hợp hơn với khả năng mở rộng của các mô hình sản xuất. Nhưng khi nói đến việc xây dựng các nguyên mẫu với tốc độ nhanh, PyTorch là một lựa chọn tốt hơn vì nó nhẹ hơn.

Đi sâu vào việc tạo mô hình bằng PyTorch vs Tensorflow

Nói chung, một mô hình Mạng Nơ-ron đơn giản bao gồm ba lớp: Lớp nhúng, lớp tổng hợp trung bình toàn cầu và lớp dày đặc. Đầu vào được cung cấp cho Lớp nhúng và Dự đoán là đầu ra từ Lớp dày.

  1. TensorFlow

Các mô hình TensorFlow thường được tạo ra với sự trợ giúp của Keras.

Lưu ý về Keras, Đây là một thư viện mã nguồn mở chỉ cung cấp các API cấp cao, không giống như TensorFlow cung cấp cả API cấp cao và cấp thấp. Nhưng vì Keras được xây dựng bằng Python, nên việc phát triển các mô hình trong Keras thân thiện với người dùng hơn so với TensorFlow.

Bất kỳ phương pháp nào trong ba cách tiếp cận đều có thể được áp dụng để phát triển các mô hình trong Keras như: Phân lớp, API chức năng và API mô hình tuần tự.

  • Phân lớp: lớp tf.keras.Model có thể được sử dụng để phát triển các mô hình có thể tùy chỉnh về tính hoàn chỉnh của nó và logic chuyển tiếp được triển khai trong phương thức gọi trong khi các lớp được xác định trong phương thức _init_ (). Quan trọng nhất, cách tiếp cận hướng đối tượng giúp tái sử dụng các lớp nhiều lần và xác định chuyển tiếp cực kỳ phức tạp.
  • API chức năng: đây là một cách tiếp cận rất thân thiện với người dùng để phát triển mô hình Mạng Nơ-ron so với Phân lớp theo khuyến nghị của cộng đồng các nhà phát triển. Cách tiếp cận này đòi hỏi một chút ít mã hóa vì đầu vào của lớp trước ngay lập tức được truyền vào và khi layer được xác định. Mô hình được khởi tạo thông qua các tensor đầu vào và đầu ra.
  • API mô hình tuần tự: nó là một dạng rút gọn cho một mô hình có thể huấn luyện, chỉ bao gồm một vài lớp phổ biến và do đó là một cách rất nhỏ gọn và đơn gian để xác định mô hình. Mặt khác, cách tiếp cận này hoạt động rất tốt về mặt hiệu suất khi tạo ra Mạng Nơ-ron đơn giản nhưng việc triển khai Mạng Nơ-ron phức tạp trở nên rất khó khăn trong những từ khác không thể linh hoạt.
  1. PyTorch

So với TensorFlow hoặc Keras, chỉ có hai cách tiếp cận để phát triển các mô hình Mạng Nơ-ron với sự trợ giúp của PyTorch: Phân lớp và tuần tự.

  • Phân lớp: việc thực hiện với phương pháp này rất giống với trong TensorFlow (Keras). Ở đây, việc phân lớp được thực hiện thông qua mô đun nn.Model và các layers được xác định trong phương thức _init_ () nhưng việc tạo chuyển tiếp được thực hiện trong phương thức chuyển tiếp thay vì gọi như trong TensorFlow (Keras). Trong PyTorch cần phải có kích thước hạt nhân chính xác để làm cho nó có mức trung bình toàn cầu, lý do là chỉ có một lớp tổng hợp trung bình có sẵn.
  • Tuần tự: cách tiếp cận này cũng rất giống với cách nó được thực hiện trong TensorFlow (Keras) và được thực hiện thông qua mô-đun Sequential

 Lưu ý: Khuyến cáo rộng rãi rằng phương pháp Phân lớp được áp dụng thay vì Tuần tự như nhiều lớp lặp lại, ví dụ RNN (Mạng Nơ-ron tái phát), LSTM (Long Short-Term Memory) không hoạt động với nn.Sequential trong PyTorch.

Đào tạo mạng lưới Nơ-ron trong TensorFlow (Keras) vs PyTorch

  • TensorFlow (Keras) – điều kiện tiên quyết là mô hình được tạo phải được biên dịch trước khi đào tạo mô hình với sự trợ giúp của hàm compile () trong đó chức năng Loss và trình tối ưu hóa được chỉ định. Hàm phù hợp, tức là model.fit () được sử dụng để huấn luyện mô hình cũng giúp xử lý hàng loạt. Nó cũng có thể quản lý việc đánh giá mô hình nếu được đề cập.
  • PyTorch – không có chức năng được xác định trước trong PyTorch để đào tạo mô hình do đó mã đào tạo mô hình sẽ được viết từ đầu. Trong khi huấn luyện mô hình, việc tính toán Loss cho từng lô được thực hiện và hàm backward () sau đó được gọi để truyền bá gradient qua các lớp. Để cập nhật các tham số để tối ưu hóa, bạn sẽ phải gọi hàm Optimizer.step ()

TensorFlow Vs. PyTorch

Các thông số để so sánh:

Nhưng nghiên cứu gần đây đã chỉ ra rằng số lượng bài nghiên cứu được công bố trên nhiều diễn đàn hoặc hội nghị khác nhau đều có lợi cho PyTorch hơn là TensorFlow.

Lưu ý: Trong biểu đồ trên, bất cứ điều gì trên 50% có nghĩa là đề cập nhiều hơn đến PyTorch so với TensorFlow cho hội nghị đó.

Trong hội nghị NerulIPS gần đây, đã có 166 bài viết về PyTorch và 74 bài về TensorFlow.

Năm 2018, các bài báo viết trên PyTorch không đáng kể so với TensorFlow nhưng đã tăng hơn gấp đôi số lượng của TensorFlow vào năm 2019.

Cùng xem đến tính phổ biến của hai framworks này:

Rõ ràng từ biểu đồ trên cho thấy PyTorch đã có thể thu hẹp khoảng cách khá nhiều với TensorFlow trong ba năm qua.

Bây giờ chúng ta hãy thảo luận về điểm cuối cùng liên quan đến việc lựa chọn PyTorch hay TensorFlow.

Cần xác định đối với:

  • Nền tảng kỹ thuật
  • Nhu cầu
  • Kỳ vọng

TensorFlow nên được ưu tiên cho tập dữ liệu lớn và hiệu suất cao là bắt buộc. Nó cung cấp các hoạt động nâng cao và tất cả các chức năng mục đích chung để xây dựng các mô hình học tập sâu.

Hiện nay, iRender chính thức ra mắt dịch vụ Gpu Cloud For AI/Deep Learning, mang đến cho người dùng trải nghiệm mới trong quá trình Build & Train & Tune dự án AI/DeepLearning với frameworks TensorFlow và PyTorch thật dễ dàng, nhanh chóng, thuận tiện và hiệu quả.

Hãy đăng kí account ngay hôm nay để được hưởng ưu đãi khi sử dụng dịch vụ của chúng tôi.

Nguồn: mygreatlearning.com
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
Contact

INTEGRATIONS

Autodesk Maya
Autodesk 3DS Max
Blender
Cinema 4D
Houdini
SketchUp
Foundry Modo
Lumion
TensorFlow
PyTorch
CNTK
Caffe++
And many more…

iRENDER TEAM

MONDAY – SUNDAY
9:00 AM – 8:00 PM
Hotline: 0981 868 890
Zalo: 0981 868 890 (Irender Việt Nam)
Skype: iRender Support
Email: support@irender.vn
CÔNG TY CỔ PHẦN CÔNG NGHỆ IRENDER VIỆT NAM
MST:0108787752
Office: 22 Thành Công, Ba Đình, Hà Nội.

Contact
0962868890 support@irender.net