Hal yang paling penting untuk disadari tentang TensorFlow adalah bahwa, untuk sebagian besar, inti tidak ditulis dengan Python : Itu ditulis dalam kombinasi C ++ dan CUDA yang sangat dioptimalkan (bahasa Nvidia untuk pemrograman GPU). Banyak dari hal itu terjadi, pada gilirannya, dengan menggunakan Eigen (pustaka C ++ dan CUDA berkinerja tinggi) dan cuDNN NVidia (pustaka DNN yang sangat optimal untuk GPU NVidia , untuk fungsi seperti konvolusi ).
Model untuk TensorFlow adalah bahwa programmer menggunakan "beberapa bahasa" (kemungkinan besar Python!) Untuk mengekspresikan model. Model ini, ditulis dalam konstruksi TensorFlow seperti:
h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...
sebenarnya tidak dieksekusi ketika Python dijalankan. Sebaliknya, apa yang sebenarnya dibuat adalah grafik aliran data yang mengatakan untuk mengambil input tertentu, menerapkan operasi tertentu, menyediakan hasilnya sebagai input untuk operasi lain, dan sebagainya. Model ini dijalankan oleh kode C ++ yang cepat, dan sebagian besar, data yang terjadi di antara operasi tidak pernah disalin kembali ke kode Python .
Kemudian programmer "mendorong" eksekusi model ini dengan menarik node - untuk pelatihan, biasanya dalam Python, dan untuk melayani, kadang-kadang dalam Python dan kadang-kadang dalam C + + mentah:
sess.run(eval_results)
Ini satu Python (atau panggilan fungsi C ++) menggunakan salah satu panggilan dalam proses untuk C ++ atau RPC untuk versi terdistribusi untuk memanggil ke server C ++ TensorFlow untuk memerintahkannya untuk mengeksekusi, dan kemudian menyalin kembali hasilnya.
Jadi, dengan itu, mari kita ulangi pertanyaannya: Mengapa TensorFlow memilih Python sebagai bahasa pertama yang didukung dengan baik untuk mengekspresikan dan mengendalikan pelatihan model?
Jawabannya sederhana: Python mungkin bahasa yang paling nyaman untuk sejumlah besar ilmuwan data dan pakar pembelajaran mesin yang juga mudah diintegrasikan dan memiliki kontrol backend C ++, selain itu juga bersifat umum, banyak digunakan baik di dalam maupun di luar Google, dan open source. Mengingat bahwa dengan model dasar TensorFlow, kinerja Python tidak begitu penting, itu cocok secara alami. Ini juga merupakan nilai tambah besar yang NumPy membuatnya mudah untuk melakukan pra-pemrosesan dengan Python - juga dengan kinerja tinggi - sebelum memasukkannya ke TensorFlow untuk hal-hal yang benar-benar berat CPU.
Ada juga banyak kerumitan dalam mengekspresikan model yang tidak digunakan ketika mengeksekusi - inferensi bentuk (misalnya, jika Anda melakukan matmul (A, B), apa bentuk data yang dihasilkan?) Dan perhitungan gradien otomatis . Ternyata bagus untuk bisa mengekspresikan mereka dengan Python, meskipun saya pikir dalam jangka panjang mereka mungkin akan pindah ke backend C ++ untuk membuat menambahkan bahasa lain lebih mudah.
(Harapannya, tentu saja, adalah untuk mendukung bahasa lain di masa depan untuk membuat dan mengekspresikan model. Ini sudah cukup mudah untuk menjalankan inferensi menggunakan beberapa bahasa lain - C ++ berfungsi sekarang, seseorang dari Facebook memberikan kontribusi Go bindings yang sedang kami tinjau sekarang , dll.)