Đ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ẽ 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.)