TensorFlow hakkında gerçekleşmesi gereken en önemli şey, çoğunlukla çekirdeğin Python'da yazılmamasıdır : Yüksek derecede optimize edilmiş C ++ ve CUDA'nın (Nvidia'nın GPU'ları programlama dili) bir kombinasyonunda yazılmıştır. Bunun çoğu, Eigen (yüksek performanslı bir C ++ ve CUDA sayısal kitaplığı) ve NVidia'nın cuDNN'sini ( NVidia GPU'lar için kıvrımlar gibi işlevler için çok optimize edilmiş bir DNN kitaplığı ) kullanarak olur.
TensorFlow için model, programcının modeli ifade etmek için "bazı dil" (büyük olasılıkla Python!) Kullanmasıdır. TensorFlow yapılarında yazılan bu model aşağıdaki gibi:
h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...
aslında Python çalıştırıldığında yürütülmez. Bunun yerine, gerçekte yaratılan şey , belirli girdileri almayı, belirli işlemleri uygulamayı, sonuçları diğer işlemler için girdi olarak tedarik etmeyi söyleyen bir veri akışı grafiğidir . Bu model hızlı C ++ kodu ile yürütülür ve çoğunlukla işlemler arasında giden veriler asla Python koduna kopyalanmaz .
Daha sonra programcı, bu modelin yürütülmesini, genellikle Python'da ve bazen Python'da ve bazen ham C ++ 'da hizmet için düğümleri çekerek "yönlendirir":
sess.run(eval_results)
Bu bir Python (veya C ++ işlev çağrısı) C ++ TensorFlow sunucusuna yürütmesini söylemek üzere C ++ TensorFlow sunucusunu çağırmak için C ++ işlem içi çağrısını veya RPC'yi kullanır ve ardından sonuçları kopyalar.
Bununla birlikte, şu soruyu yeniden ifade edelim: TensorFlow neden modellerin eğitimini ifade etmek ve kontrol etmek için ilk iyi desteklenen dil olarak Python'u seçti?
Bunun cevabı basittir: Python muhtemelen aynı zamanda genel olurken kolay, bütünleştirmek ve bir C ++ arka uç kontrol sahip olması da var veri bilim adamları ve makine öğrenme uzman çok aralığı için en rahat dil, içini ve dışını hem yaygın olarak kullanılan ve açık kaynak kodlu. TensorFlow'un temel modeliyle Python'un performansı o kadar önemli değil, doğal bir uyumdu. NumPy'nin, gerçekten CPU-ağır şeyler için TensorFlow'a beslemeden önce Python'da - ayrıca yüksek performansla - ön işlemeyi kolaylaştırması da büyük bir artı .
Ayrıca, modeli yürütürken kullanılmayan modeli ifade etmede bir takım karmaşıklık da vardır - şekil çıkarımı (örneğin, matmul (A, B) yaparsanız, elde edilen verilerin şekli nedir?) Ve otomatik gradyan hesaplaması. Python'dakileri ifade edebilmek güzeldi, ancak uzun vadede muhtemelen diğer dilleri eklemeyi kolaylaştırmak için C ++ arka ucuna geçeceklerini düşünüyorum.
(Tabii ki, gelecekte modeller oluşturmak ve ifade etmek için diğer dilleri desteklemektir. Birkaç başka dili kullanarak çıkarım yapmak zaten oldukça basittir - C ++ şimdi çalışıyor, Facebook'tan biri şu anda incelediğimiz Go bağlarına katkıda bulundu , vb.)