TensorFlow, tại sao python là ngôn ngữ được chọn?


143

Gần đây tôi đã bắt đầu nghiên cứu học tập sâu và các kỹ thuật ML khác, và tôi bắt đầu tìm kiếm các khung đơn giản hóa quá trình xây dựng mạng lưới và đào tạo nó, sau đó tôi tìm thấy TensorFlow, có ít kinh nghiệm trong lĩnh vực này, đối với tôi, dường như tốc độ là một yếu tố lớn để tạo ra một hệ thống ML lớn hơn nữa nếu làm việc với việc học sâu, vậy tại sao python lại được Google chọn để tạo ra TensorFlow? Sẽ không tốt hơn để làm cho nó qua một ngôn ngữ có thể được biên dịch và không được giải thích?

Những lợi thế của việc sử dụng Python so với một ngôn ngữ như C ++ để học máy là gì?


2
Tiểu nitlog: Biên dịch và giải thích không đối nghịch. Ngoài ra, bất kỳ ngôn ngữ lập trình nào cũng có thể được thực hiện với trình biên dịch hoặc với trình thông dịch hoặc cả hai. Có một câu trả lời hay về sự khác biệt về Kỹ thuật phần mềm.
8

Câu trả lời:


240

Điều quan trọng nhất để nhận ra về TensorFlow là, phần lớn, phần lõi không được viết bằng Python : Nó được viết bằng sự kết hợp giữa C ++ và CUDA được tối ưu hóa cao (ngôn ngữ của Nvidia dành cho GPU lập trình). Phần lớn điều đó xảy ra, đến lượt nó, bằng cách sử dụng Eigen (một hiệu suất cao C ++ và CUDA thư viện số) và NVidia của cuDNN (thư viện DNN rất tối ưu hóa cho NVIDIA GPU , cho các chức năng như nhiều nếp cuộn ).

Mô hình cho TensorFlow là lập trình viên sử dụng "một số ngôn ngữ" (rất có thể là Python!) Để diễn tả mô hình. Mô hình này, được viết trong các cấu trúc TensorFlow như:

h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...

không thực sự được thực thi khi Python chạy. Thay vào đó, những gì thực sự được tạo ra là một biểu đồ dataflow có nghĩa là lấy các đầu vào cụ thể, áp dụng các hoạt động cụ thể, cung cấp kết quả làm đầu vào cho các hoạt động khác, v.v. Mô hình này được thực thi bằng mã C ++ nhanh và đối với hầu hết các phần, dữ liệu đi giữa các hoạt động không bao giờ được sao chép trở lại mã Python .

Sau đó, lập trình viên "điều khiển" việc thực hiện mô hình này bằng cách kéo các nút - để đào tạo, thường là bằng Python và để phục vụ, đôi khi bằng Python và đôi khi bằng C ++ thô:

sess.run(eval_results)

Một Python này (hoặc gọi hàm C ++) sử dụng cuộc gọi trong quá trình tới C ++ hoặc RPC cho phiên bản phân tán để gọi vào máy chủ TensorFlow của C ++ để yêu cầu nó thực thi và sau đó sao chép lại kết quả.

Vì vậy, như đã nói, chúng ta hãy diễn đạt lại câu hỏi: Tại sao TensorFlow chọn Python làm ngôn ngữ được hỗ trợ tốt đầu tiên để thể hiện và kiểm soát việc đào tạo các mô hình?

Câu trả lời rất đơn giản: Python có lẽ ngôn ngữ thoải mái nhất đối với nhiều nhà khoa học dữ liệu và chuyên gia máy học, cũng dễ tích hợp và kiểm soát một phụ trợ C ++, đồng thời cũng được sử dụng rộng rãi cả bên trong và bên ngoài của Google và nguồn mở. Cho rằng với mô hình cơ bản của TensorFlow, hiệu năng của Python không quan trọng lắm, đó là một sự phù hợp tự nhiên. Đây cũng là một điểm cộng rất lớn mà NumPy giúp dễ dàng xử lý trước trong Python - cũng với hiệu năng cao - trước khi đưa nó vào TensorFlow cho những thứ thực sự nặng về CPU.

Ngoài ra còn có một loạt các phức tạp trong việc biểu thị mô hình không được sử dụng khi thực hiện nó - suy luận hình dạng (ví dụ: nếu bạn thực hiện matmul (A, B), hình dạng của dữ liệu kết quả là gì?) Và tính toán độ dốc tự động . Hóa ra thật tuyệt khi có thể diễn đạt những thứ đó bằng Python, mặc dù tôi nghĩ về lâu dài họ có thể sẽ chuyển sang phụ trợ C ++ để giúp việc thêm các ngôn ngữ khác dễ dàng hơn.

(Tất nhiên, hy vọng là sẽ hỗ trợ các ngôn ngữ khác trong tương lai để tạo và thể hiện các mô hình. Thật đơn giản để chạy suy luận bằng cách sử dụng một số ngôn ngữ khác - C ++ hoạt động ngay bây giờ, một người nào đó từ Facebook đã đóng góp Go ràng buộc mà chúng tôi đang xem xét , Vân vân.)


1
Làm thế nào để bạn xác định 'suy luận' trong It's already quite straightforward to run inference using several other languagesviệc trở thành một lập trình viên Prolog, nó không phù hợp với tôi; có vẻ như một từ không đúng chỗ
Guy Coder

1
Chạy chỉ cần vượt qua phía trước của mô hình. Áp dụng nó vào dữ liệu vs đào tạo.
dga

Liên quan đến suy luận hình dạng. Tôi đang chuyển đổi một số mạng thần kinh sang ngôn ngữ gõ tĩnh chỉ để học sử dụng và việc gõ Duck trong Ptyhon chắc chắn làm cho phần mã đó dễ viết hơn nhiều. Về phía filp, việc viết mã Python với các loại khiến cho việc tìm hiểu các loại ngay trước khi chạy trở nên khó khăn hơn nhiều. Tôi thấy nhiều lỗi thời gian chạy hơn khi sử dụng Ptyhon so với ngôn ngữ khác là F #. Nó có thể đáng chú ý gõ vịt trong câu trả lời.
Guy Coder

2
Trong khi đó là sự thật, tôi nghĩ rằng việc đánh máy của trăn là một lý do gián tiếp. Trong số các ngôn ngữ thường được sử dụng trong Google --- quora.com/, --- Python là kết hợp tốt nhất cho máy học trung bình Ph.D. Sự lựa chọn thực sự duy nhất khác là C ++ (Tôi không biết nhiều người sử dụng Lua, ngôn ngữ mà Torch sử dụng) và C ++ nằm khá xa vùng thoải mái của hộp công cụ ML. Rất nhiều người ML đến từ một nền tảng matlab, với numpy ngày càng phổ biến. Dĩ nhiên, gõ vịt có lẽ là phổ biến, nhưng điều đó vượt quá phạm vi của tôi.
dga

Cảm ơn, tóm tắt tốt đẹp. Guy Coder --- như ý nghĩa của "suy luận" trong trò chơi, xem bài viết Wikipedia về suy luận thống kê . Đó là suy luận quy nạp trái ngược với kiểu suy diễn được thực hiện bởi Prolog.
Bob Carpenter

35

TF không được viết bằng python. Nó được viết bằng C ++ (và sử dụng các thư viện số hiệu suất cao và mã CUDA ) và bạn có thể kiểm tra điều này bằng cách xem github của họ . Vì vậy, lõi được viết không phải bằng python nhưng TF cung cấp giao diện cho nhiều ngôn ngữ khác ( python, C ++, Java, Go )

nhập mô tả hình ảnh ở đây

Nếu bạn đến từ một thế giới phân tích dữ liệu, bạn có thể nghĩ về nó như numpy (không được viết bằng python, nhưng cung cấp giao diện cho Python) hoặc nếu bạn là nhà phát triển web - hãy nghĩ về nó như một cơ sở dữ liệu (PostgreQuery, MySQL, có thể được gọi từ Java, Python, PHP)


Frontend Python (ngôn ngữ mà mọi người viết mô hình trong TF) là phổ biến nhất do nhiều lý do . Theo tôi, lý do chính là lịch sử: phần lớn người dùng ML đã sử dụng nó (một lựa chọn phổ biến khác là R) vì vậy nếu bạn không cung cấp giao diện cho python, thư viện của bạn chắc chắn sẽ bị che khuất.


Nhưng được viết bằng python không có nghĩa là mô hình của bạn được thực thi bằng python. Ngược lại, nếu bạn đã viết mô hình của mình theo đúng cách thì Python không bao giờ được thực thi trong quá trình đánh giá biểu đồ TF (ngoại trừ tf.py_func () , tồn tại để gỡ lỗi và nên tránh chính xác trong mô hình thực vì nó được thực thi trên Bên Python).

Điều này khác với ví dụ numpy. Ví dụ: nếu bạn làm np.linalg.eig(np.matmul(A, np.transpose(A))(đó là eig(AA')), thao tác sẽ tính toán chuyển đổi trong một số ngôn ngữ nhanh (C ++ hoặc fortran), trả lại cho python, lấy nó từ python cùng với A và tính toán nhân với một số ngôn ngữ nhanh và đưa nó trở lại python, sau đó tính toán giá trị riêng và trả lại cho python. Vì vậy, dù sao các hoạt động đắt tiền như matmul và eig được tính toán hiệu quả, bạn vẫn mất thời gian bằng cách di chuyển kết quả sang python trở lại và buộc. TF không làm điều đó , một khi bạn đã xác định biểu đồ các tenxơ của bạn chảy không phải bằng python mà bằng C ++ / CUDA / thứ khác.


Trong bối cảnh này, bài đăng trên blog của tôi có thể được quan tâm: blog.ephorie.de/why-r-for-data-science-and-not-python
vonjd

4

Python cho phép bạn tạo các mô-đun mở rộng bằng C và C ++, giao tiếp với mã gốc và vẫn nhận được những lợi thế mà Python mang lại cho bạn.

TensorFlow sử dụng Python, vâng, nhưng nó cũng chứa một lượng lớn C ++ .

Điều này cho phép một giao diện đơn giản hơn để thử nghiệm với chi phí ít suy nghĩ của con người hơn với Python và thêm hiệu suất bằng cách lập trình các phần quan trọng nhất trong C ++.


0

Tỷ lệ mới nhất bạn có thể kiểm tra từ đây cho thấy bên trong TensorFlow C ++ chiếm ~ 50% mã và Python chiếm ~ 40% mã.

Cả C ++ và Python đều là ngôn ngữ chính thức tại Google nên không có gì lạ tại sao nó lại như vậy. Nếu tôi phải cung cấp hồi quy nhanh trong đó có C ++ và Python ...

C ++ nằm trong đại số tính toán và Python được sử dụng cho mọi thứ khác, kể cả để thử nghiệm. Biết được sự phổ biến của thử nghiệm ngày nay như thế nào, không có gì lạ khi tại sao mã Python lại đóng góp nhiều cho TF.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.