TensorFlow, neden python seçilen dildi?


143

Son zamanlarda derin öğrenme ve diğer ML tekniklerini incelemeye başladım ve bir ağ oluşturma sürecini basitleştiren ve eğiten çerçeveler aramaya başladım, sonra TensorFlow'u sahada çok az deneyime sahip buldum, benim için hız bir derin öğrenme ile çalışırken büyük bir ML sistemi daha fazla yapmak için büyük bir faktör, bu yüzden neden Python TensorFlow yapmak için Google tarafından seçildi? Derlenebilen ve yorumlanamayan bir dil üzerinde yapmak daha iyi olmaz mıydı?

Makine öğrenimi için C ++ gibi bir dil üzerinde Python kullanmanın avantajları nelerdir?


2
Küçük nitpick: Derleme ve yorumlama karşıt değildir. Ayrıca, herhangi bir programlama dili bir derleyici veya yorumlayıcı ya da her ikisi ile uygulanabilir. Yazılım Mühendisliği konusundaki ayrım konusunda güzel bir cevap var.
8bittree

Yanıtlar:


240

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


1
It's already quite straightforward to run inference using several other languagesProlog programcısı olmak benim için uygun olmayan 'çıkarım'ı nasıl tanımlıyorsunuz ; yersiz bir kelime gibi görünüyor.
Guy Coder

1
Modelin sadece ileri geçişini çalıştırıyor. Verileri eğitime karşı uygulamak.
dga

Şekil çıkarımında. Bazı sinir ağlarını sadece öğrenme amaçlı olarak statik olarak yazılmış bir dile dönüştürüyorum ve Ptyhon'da yazarak Duck kesinlikle kodun bu kısmının yazılmasını çok daha kolay hale getiriyor. Filp tarafında, Python kodunu türlerle birlikte yazmak, Ptyhon'u öğrenmeden hemen önce türleri almayı öğrenirken çok daha zor hale getirir. Ptyhon'u F # olan diğer dilden daha fazla çalışma zamanı hatası görüyorum. Cevapta Duck'ın yazdığını belirtmek faydalı olabilir.
Guy Coder

2
Bu doğru olsa da, python'un yazmasının dolaylı bir neden olduğunu düşünüyorum. Google'da yaygın olarak kullanılan dillerden --- quora.com/… --- Python, ortalama makine öğrenimi doktorası için en iyi eştir. Tek gerçek seçim C ++ olurdu (Lua kullanan bir sürü insan bilmiyorum, Torch'un kullandığı dil) ve C ++ ML araç kutusu konfor bölgesinden oldukça uzak. ML milletinin birçoğu matlab kökenli bir arka plandan geliyor ve giderek daha popüler. Muhtemelen altta yatan ördek yazımı elbette popülerliktir, ancak bu benim kapsamımın ötesinde.
dga

Teşekkürler, güzel özet. Guy Coder --- oyunda "çıkarım" hissine gelince , istatistiksel çıkarım hakkındaki Wikipedia makalesine bakın . Bu var endüktif aksine çıkarsama tümdengelim Prolog tarafından gerçekleştirilen tip.
Bob Carpenter

35

TF python ile yazılmaz. C ++ ile yazılmıştır (ve yüksek performanslı sayısal kütüphaneler ve CUDA kodu kullanır) ve bunu github'a bakarak kontrol edebilirsiniz . Böylece çekirdek python ile yazılmamıştır, ancak TF diğer birçok dile ( python, C ++, Java, Go ) bir arayüz sağlar.

resim açıklamasını buraya girin

Bir veri analizi dünyasından geliyorsanız, bunu numpy gibi düşünebilirsiniz (python'da yazılmaz, ancak Python'a bir arayüz sağlar) veya bir web geliştiricisi iseniz - bunu bir veritabanı olarak düşünün (PostgreSQL, MySQL, Java, Python, PHP'den çağrılabilir)


Python ön ucu (insanların TF'de model yazdığı dil) birçok nedenden dolayı en popüler olanıdır . Bence ana neden tarihsel: ML kullanıcılarının çoğunluğu zaten kullanıyor (başka bir popüler seçim R), bu nedenle python için bir arayüz sağlamayacaksanız, kitaplığınız muhtemelen belirsizliğe mahkumdur.


Ancak python ile yazılmış olması, modelinizin python ile yürütüldüğü anlamına gelmez. Aksine, modelinizi doğru şekilde yazdıysanız , hata ayıklama için mevcut olan ve tam olarak yürütüldüğü için gerçek modelden kaçınılması gereken TF grafiğinin ( tf.py_func () dışında asla Python çalıştırılmazsa Python'un tarafı).

Bu, örneğin numpy'den farklıdır. Örneğin np.linalg.eig(np.matmul(A, np.transpose(A))( yaparsanız eig(AA')), işlem bazı hızlı dilde (C ++ veya fortran) transpoze işlemi hesaplar, python'a döndürür, A ile birlikte python'dan alır ve bazı hızlı dilde çarpma işlemini hesaplar ve sonra özdeğerleri hesaplayın ve python'a döndürün. Bununla birlikte, matmul ve eig gibi pahalı işlemler verimli bir şekilde hesaplanır, yine de sonuçları python'a geri ve zorlamaya taşıyarak zaman kaybedersiniz. TF bunu yapmaz , grafiği tanımladıktan sonra, tensörleriniz python'da değil C ++ / CUDA / başka bir şeyde akar.


Bu bağlamda blog yayınım
vonjd

4

Python, C ve C ++ kullanarak yerel kodla arabirim oluşturarak ve yine de Python'un size sağladığı avantajları elde etmenizi sağlar.

TensorFlow Python kullanıyor, evet, ama aynı zamanda büyük miktarlarda C ++ içeriyor .

Bu, Python ile daha az insan düşünce yükü ile deneyler için daha basit bir arayüz sağlar ve C ++ 'daki en önemli parçaları programlayarak performans ekler.


0

Eğer gelen kontrol edebilirsiniz son oran burada gösterileri ++ TensorFlow C içeride ~ kodun% 50 alır ve Python ~ kodun% 40 alır.

Hem C ++ hem de Python Google'daki resmi dillerdir, bu yüzden bunun neden böyle olduğuna şaşmamak gerekir. C ++ ve Python'un bulunduğu yerlerde hızlı regresyon sağlamak zorunda kalırsam ...

C ++, hesaplama cebirinin içindedir ve Python, test de dahil olmak üzere her şey için kullanılır. Testin bugün ne kadar yaygın olduğunu bilmek, Python kodunun TF'ye neden bu kadar katkıda bulunduğunu merak etmiyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.