PyTorch veya TensorFlow? İşte yeni başlayanlar için bir rehber

Derlemeyi ve organize etmeyi isteyin

Qubit Üretildi | Genel Hesap QbitAI

Birkaç gün önce, Qubit bir "Huyou VC Rehberi" gönderdi. Önerilerden biri, bir yapay zeka uzmanı gibi davrandığınızda, iyi bilinen TensorFlow hakkında konuşmamak en iyisidir.

PyTorch.

Aslında, bu tamamen alay konusu değil. TensorFlow ile karşılaştırıldığında, PyTorch'un çok sayıda hayranı var. Keras yazarı François Chollet tarafından yayınlanan verilere göre PyTorch, GitHub'daki çeşitli derin öğrenme çerçeveleri arasında beşinci sırada yer alıyor.

Ancak herkese PyTorch'un bu yıl 19 Ocak'ta resmi olarak piyasaya sürüldüğünü hatırlatmam gerekiyor.

İkinci çeyrekte derin öğrenme çerçevelerinin sıralaması

Son zamanlarda, Stanford Üniversitesi'nde makine öğrenimini araştıran bir doktora öğrencisi olan Awni Hannun, PyTorch veya TensorFlow konusunda derinlemesine bir karşılaştırma yaptı. Kübit, içeriği şu şekilde iletir:

Yazdığım bu kılavuz, esas olarak PyTorch ve TensorFlow arasındaki farkları karşılaştırıyor. Umarım yeni bir projeye başlamak veya derin bir öğrenme çerçevesine geçmeyi düşünenlere yardımcı olur.

Derin öğrenme yığınının eğitimi ve dağıtımı ile ilgili programlanabilirliği ve esnekliği esas olarak araştırdım. Burada, hız, bellek kullanımı vb. Açısından değiş tokuşlar hakkında çok fazla konuşmayacağım.

Önce sonucu koyun

PyTorch, hızlı bir şekilde prototip üretmek için araştırmacılara, meraklılara ve küçük ölçekli projelere daha elverişlidir. TensorFlow, özellikle platformlar arası ve gömülü dağıtım gerektiğinde, büyük ölçekli dağıtım için daha uygundur.

O zaman onlar hakkında tek tek konuşalım.

Başlama zamanı

Kazanan: PyTorch

PyTorch, esasen Numpy'nin yerine geçer ve GPU'yu destekler ve derin sinir ağları oluşturmak ve eğitmek için kullanılabilecek gelişmiş özelliklere sahiptir. Numpy, Python ve yaygın derin öğrenme kavramlarına (evrişimli katman, döngü katmanı, SGD vb.) Aşina iseniz, PyTorch'a başlamak çok kolay olacaktır.

Ve TensorFlow, Python'a gömülü bir programlama dili olarak görülebilir. Yazdığınız TensorFlow kodu Python tarafından bir grafikte derlenecek ve ardından TensorFlow yürütme motoru tarafından çalıştırılacaktır. Bu artan yönlendirme seviyesinden rahatsız olan birçok yeni kullanıcı gördüm. Aynı nedenle, TensorFlow'un oturumlar, grafikler, değişken kapsamlar, yer tutucular vb. Gibi öğrenmesi gereken bazı ek kavramlar vardır.

Ek olarak, temel bir modeli çalıştırmak için daha fazla standart kod gereklidir. Dolayısıyla TensorFlow ile başlama süresi kesinlikle PyTorch'tan daha uzundur.

Diyagram oluşturma ve hata ayıklama

Kazanan: PyTorch

Hesaplama grafikleri oluşturmak ve çalıştırmak, muhtemelen iki çerçeve arasındaki en farklı yerdir. PyTorch'ta grafik yapısı dinamiktir, bu da grafiğin çalışma zamanında oluşturulduğu anlamına gelir. TensorFlow'da grafik yapısı statiktir, bu da grafiğin "derlendiği" ve ardından çalıştırıldığı anlamına gelir.

Basit bir örnek vermek gerekirse, PyTorch'ta standart Python sözdiziminde bir for döngüsü yapısı yazabilirsiniz.

Aralık içindeki _ için (T):

Burada T, kod her yürütüldüğünde değiştirilebilir. TensorFlow'da bu, tf. while_loop gibi grafikler oluşturmak için "kontrol akışı işlemlerinin" kullanılmasını gerektirir. TensorFlow, ortak yapılar için dynamic_rnn sağlar, ancak özel dinamik hesaplamalar oluşturmak gerçekten daha zordur.

PyTorch'daki basit grafik yapısının anlaşılması ve daha da önemlisi hata ayıklaması daha kolaydır. PyTorch kodunda hata ayıklamak, Python kodunda hata ayıklamak gibidir. Pdb kullanabilir ve her yerde kesme noktaları ayarlayabilirsiniz. TensorFlow kodunda hata ayıklamak kolay değildir. Değişkenlerin oturumdan kontrol edilmesini isteyin veya TensorFlow'un hata ayıklayıcısını (tfdbg) kullanmayı öğrenin.

Kapsamlılık

Kazanan: TensorFlow

PyTorch olgunlaştıkça, bu bölümdeki boşluğun sıfıra yaklaşmasını bekliyorum. Ancak şu anda TensorFlow, PyTorch'un desteklemediği bazı özelliklere sahiptir. Onlar:

  • Tensörü boyut boyunca çevirin (np.flip, np.flipud, np.fliplr)

  • Sonsuz ve sayısal olmayan tensörleri kontrol edin (np.is_nan, np.is_inf)

  • Hızlı Fourier Dönüşümü (np.fft)

Bu TensorFlow desteği. Ek olarak, TensorFlow'un katkı paketi, PyTorch'un sahip olmadığı daha gelişmiş özellikler ve modeller içerir.

Serileştirme

Kazanan: TensorFlow

Modelleri her iki çerçeve altında kaydetmek ve yüklemek çok basittir. PyTorch, modellerin tüm ağırlıklarını kaydedebilen veya tüm sınıfları toplayabilen özellikle basit bir API'ye sahiptir. TensorFlow'un Saver nesnesinin kullanımı da çok kolaydır ve inceleme için daha fazla seçenek sunar.

TensorFlow serileştirmenin ana avantajı, grafiğin tamamının bir protokol tamponu olarak kaydedilebilmesidir. Parametreler ve işlemler dahil. Bununla birlikte, grafikler diğer desteklenen dillere de (C ++, Java) yüklenebilir. Bu, yığını dağıtmak için gereklidir. Teorik olarak, modelin kaynak kodunu değiştirmek ama yine de eski modeli çalıştırmak istediğinizde kullanışlıdır.

dağıtmak

Kazanan: TensorFlow

Küçük ölçekli sunucu tarafı dağıtımları için (bir Flask web sunucusu gibi), her iki çerçeve de çok basittir.

Mobil ve gömülü dağıtımlar için TensorFlow daha iyidir. Yalnızca PyTorch'tan daha iyi değil, aynı zamanda çoğu derin öğrenme çerçevesinden daha iyidir. TensorFlow'u kullanarak, Android veya iOS platformunda konuşlandırıldığında, en azından modelin çıkarım kısmını Java veya C ++ ile yeniden yazmak zorunda kalmadan yalnızca küçük bir miktar çalışma gerekir.

Yüksek performanslı sunucu tarafı dağıtım için, TensorFlow Sunumu da kullanılabilir. Performansa ek olarak, TensorFlow Sunumun önemli bir avantajı, hizmet arızasına neden olmadan modelleri kolayca takıp çıkarabilmesidir.

Dokümantasyon

Kazanan: Beraberlik

Her iki çerçeve için de ihtiyacım olan her şeyi dokümantasyonda buldum. Python API iyi bir şekilde belgelenmiştir ve çerçeveyi öğrenmek için yeterli durum ve öğretici vardır.

Özel bir durum, PyTorch'un C kütüphanelerinin çoğunun belgelenmemiş olmasıdır. Ancak, bu yalnızca özelleştirilmiş bir C uzantısı yazarsanız önemlidir.

Veri yükleme

Kazanan: PyTorch

PyTorch'da veri yükleme API'si iyi tasarlanmıştır. Arayüz bir veri seti, bir örnekleyici ve bir veri yükleyiciden oluşur. Veri yükleyici, örnekleyicinin planına göre veri setine dayalı bir yineleyici oluşturur. Veri yüklemesini paralel hale getirmek, num_workers parametresini veri yükleyiciye geçirmek kadar basittir.

TensorFlow'da özellikle kullanışlı bir veri yükleme aracı bulamadım. Çoğu durumda, TensorFlow grafiğine paralel olarak çalıştırılacak ön işleme kodunu doğrudan eklemek her zaman mümkün değildir. Ve API'nin kendisi uzun ve öğrenmesi zordur.

Ekipman yönetimi

Kazanan: TensorFlow

TensorFlow'un cihaz yönetiminin kullanımı çok kolaydır. Varsayılan ayarlar iyi olduğundan, genellikle ayarlama yapmanız gerekmez. Örneğin, TensorFlow, GPU'da (varsa) çalıştırmak istediğinizi varsayacaktır. PyTorch'ta, CUDA etkin olsa bile, her şeyi açıkça cihaza taşımanız gerekir.

TensorFlow cihaz yönetiminin tek dezavantajı, varsayılan olarak tüm GPU belleğini almasıdır. Basit çözüm, CUDA_VISIBLE_DEVICES'ı belirlemektir. Bazen insanlar bunu unutur, bu nedenle GPU boştayken meşgul görünür.

PyTorch'ta, kodun CUDA'nın daha sık kullanılabilir olup olmadığını ve daha açık cihaz yönetimini kontrol etmesi gerektiğini buldum. Bu özellikle hem CPU hem de GPU'da çalışabilen kod yazarken geçerlidir. Ve GPU'daki PyTorch değişkenlerini biraz ayrıntılı olan Numpy dizisine dönüştürmeniz gerekir.

numpy_var = değişken.cpu (). data.numpy ()

Özel uzantı

Kazanan: PyTorch

Her iki çerçeve de C, C ++ ve CUDA'da yazılmış özel uzantılar oluşturabilir ve bağlayabilir. TensorFlow, birden çok türü ve cihazı desteklemek için daha iyi olsa da, hala daha fazla standart kod gerektirmektedir. PyTorch'ta, her CPU ve GPU için yalnızca bir arayüz ve ilgili uygulama yazmanız gerekir. İki çerçevede uzantıların derlenmesi de doğrudan bir bellektir ve pip tarafından yüklenen içeriğin dışında herhangi bir başlık dosyası veya kaynak kodu indirmeye gerek yoktur.

TensorBoard hakkında

TensorBoard, makine öğrenimi eğitimi sırasında veri değişikliklerini görüntülemek için TensorFlow ile birlikte gelen bir görselleştirme aracıdır. Eğitim komut dosyasındaki çeşitli kod parçacıkları aracılığıyla, herhangi bir modelin eğitim eğrisini ve doğrulama sonuçlarını görüntüleyebilirsiniz. TensorBoard, özellikle başsız düğümlerde depolanan sonuçları görselleştirmek için uygun olan bir web hizmeti olarak çalışır.

Benzer bir işlev yoksa, PyTorch'u kullanmak istemiyorum. Neyse ki, iki açık kaynak projesinin yardımıyla elde edilebilir. Birincisi tensorboard_logger ve ikincisi mum boya. Tensorboard_logger kitaplığının kullanımı, TensorBoard'un "Özet" ten daha kolaydır, ancak bunu kullanmak için önce TensorBoard'u kurmanız gerekir.

Crayon, TensorBoard'ın yerini tamamen alabilir, ancak daha fazla ayar gerektirir (docker bir ön koşuldur).

Keras hakkında

Keras, yapılandırılabilir bir arka uca sahip üst düzey bir API'dir. Şu anda TensorFlow, Theano, CNTK desteklenmektedir. Belki yakın gelecekte PyTorch da destek sağlayacaktır. Tf.contrib'in bir parçası olarak Keras, TensorFlow ile de dağıtılır.

Yukarıda Keras'ı tartışmamış olsam da, API'sinin kullanımı özellikle kolaydır, bu aynı zamanda yaygın derin sinir ağı mimarileri ile işbirliği yapmanın en hızlı yoludur. Ancak API'yi kullanmak PyTorch veya çekirdek TensorFlow kullanmak kadar esnek değildir.

Keras, yaygın olarak kullanılan birçok derin sinir ağı mimarisinde en hızlı yöntemlerden biridir.

TensorFlow Fold Hakkında

Bu yılın Şubat ayında Google, TensorFlow Fold'u başlattı. Bu kütüphane, daha dinamik grafiklerin oluşturulmasına izin veren TensorFlow IQ üzerine inşa edilmiştir. Bu kitaplığın ana avantajı dinamik toplu işlemedir. Dinamik toplu işleme, farklı boyutlardaki girdiler üzerinde toplu hesaplamaları otomatik olarak gerçekleştirebilir (örneğin, bir ayrıştırma ağacında tekrarlayan bir ağ).

Programlanabilirlik açısından, sözdizimi PyTorch kadar basit değildir.Tabii ki, bazı durumlarda toplu işlemenin getirdiği performans iyileştirmesi hala dikkate alınmaya değer.

Yukarıdakiler Awni Hannun'dan bir paylaşım. Umarım herkese faydalı olur, ayrıca dinlerseniz kübitler birkaç reddit okuyucu yorumu taşımaya devam edecek.

Okuyucu Reiinakano:

"Dokümantasyon" bağlantısının eşit olarak bölündüğünü sanmıyorum.

Resmi TensorFlow belgeleri korkunç. Örneğin, PyTorch belgelerinde, transfer öğrenmesinin açıklanması için pratik ve kullanışlı kod kullanılır ve ayrıca inşa yöntemi de açıklanır. TensorFlow metninde, tüm açıklama herhangi bir gerçek kod olmadan bir bash betiği çalıştırmaktır.

Okuyucu ThaHypnotoad:

PyTorch'un hala gidecek uzun bir yolu var. Birkaç gün önce int tensörün neg () tanımı olmadığını keşfettim. Ancak, statik grafiklerde hata ayıklamaktan daha çok nefret ediyorum. Bu yüzden PyTorch ile büyümenin zorluklarına katlanmayı seçtim.

Okuyucu trias10:

Diğer bir dezavantaj, PyTorch'un Windows için resmi desteğinin olmaması, TensorFlow'un sahip olmasıdır. Çoğu durumda (genellikle finans ve sigorta endüstrileri) geliştirme ve prototip oluşturma için Windows'u ve üretim dağıtımı için Linux kullanır, bu nedenle her ikisini de destekleyebilecek bir çerçeveye ihtiyacınız vardır.

Tamam, bugün bunun hakkında konuşalım. Umarım sana yardımcı olur ~

- Bitiş -

Samimi işe alım

Qubit, editörleri / muhabirleri işe alıyor ve merkezi Pekin, Zhongguancun'da bulunuyor. Yetenekli ve hevesli öğrencilerin bize katılmasını dört gözle bekliyoruz! Ayrıntılar için, lütfen QbitAI diyalog arayüzünde "işe alım" kelimesiyle yanıt verin.

Qubit QbitAI

' ' Yapay zeka teknolojisi ve ürünlerindeki yeni eğilimleri takip edin

14 yıllık altın vücut kırıldı, 8 yıllık son rekor kırıldı ve James kariyerinin en kötü 4 rekorunu kıracak!
önceki
Trende ayak uyduramıyorum, seni terk edeceğim ve asla hoşçakal demeyeceğim
Sonraki
Gümüş tilki, hızlı başarı ve hızlı kar için istekli olan Futbol Federasyonu tarafından belirlenir ve yüzünü kurtarmak için U23'e ihtiyaç duymaz! Hala büyük bir gevşeklik sesi var
557 binek ile dünyada ilk sırada yer alan World of Warcraft'ın en iyi oyuncusu!
2. çalın! Blok 3! % 89'un üzerinde düşük savunma! Harden sadece MVP için savaşmıyor!
Bu iki yeni otomobil ile BAIC Magic Speed'in marka stratejisinin doğru olduğunu görebiliyoruz.
Evergrande çok hızlı! 50 milyon satın alma şiddetli kuş, derebeyi Şanghay medyasını yeniden kazandı: dört büyük başlık önünde yakalandı
çılgın! Bu tavuk yiyen oyun ateş içindir ve dünyanın tavuk yeme eklentileri oyuna dahil mi?
Bir başka iyi haber! Rockets, Paul'ün 2 yedek lastiğini mi imzaladı? Morey'nin "üç sigortası" kazalarla ilgileniyor!
MG X-motion konsept otomobilinin dünya prömiyeri, F1 pistini Pekin Otomobil Fuarı'na taşıyor
Dalian Football Godfather: En çok yendiğim çocuk! 34 yaşındaki adam eve döndüğünde hala çocuk mu?
Wang Sicong, PlayerUnknown'ın Battlegrounds PGI'sına da katıldı mı? Blue Hole ve Tencent ile kazananlar olacak!
O yokken Warriors 4 maçta 112 puan kaybetti, galibiyet yüzdesi% 41, ancak bazıları onun süper dev olmadığını söyledi!
Guizhou, ameliyathaneyi geçmek ve cesurca pratik yapmak için her şeyi mi yapıyor? "Dantel pantolon" kalmak için maaş kes! Wen Xiaoting çoktan seçmeli sorularla karşı karşıya
To Top