TensorFlow için Swift (Arşiv Modunda)

TensorFlow için Swift, makine öğrenimi, derleyiciler, farklılaştırılabilir programlama, sistem tasarımı ve daha fazlasıyla ilgili en son araştırmaları bir araya getiren yeni nesil makine öğrenimi platformunda bir deneydi. Şubat 2021'de arşivlendi. Bu projeden elde edilen bazı önemli başarılar şunlardır:

Bu site daha fazla güncelleme almayacak. API belgeleri ve ikili indirmelerin yanı sıra Açık Tasarım İncelemesi toplantı kayıtları da erişilebilir olmaya devam edecek.

Swift

Swift, geniş ve büyüyen bir kullanıcı tabanına sahip, açık kaynaklı bir genel amaçlı programlama dilidir. Swift'i seçtik çünkü açık dil tasarım sürecine sahip ve " TensorFlow için Neden Swift " belgesinde ayrıntılı olarak açıklanan belirli teknik nedenlerden dolayı. Okuyucunun çoğunun buna aşina olmadığını varsayıyoruz, bu yüzden burada onunla ilgili bazı önemli ek noktalara kısaca değineceğiz.

Swift'in gelişimi 2010 yılında başladı ve akademik yenilik ya da programlama metodolojilerini dini olarak yaymak yerine programlama dili tasarımındaki en iyi uygulamaları tek bir sistemde bir araya getirmeyi amaçladı. Sonuç olarak, çoklu paradigma geliştirmeyi (örn. İşlevsel, OOP, jenerik, prosedürel vb.) Tek bir sistemde destekler ve akademik dillerden birçok iyi bilinen kavramı (örn. Örüntü eşleştirme , cebirsel veri türleri ve tür sınıfları) getirir. ön plana. Geliştiricileri Swift'de tüm kodlarını yeniden yazmaya şiddetle teşvik etmek yerine, pragmatik olarak diğer dillerle birlikte çalışabilirliğe odaklanır, örneğin, C başlık dosyalarını doğrudan içe aktarmanıza ve bunları bir FFI olmadan kullanmanıza ve (şimdi) Python API'lerini sarmalayıcılar olmadan kullanmanıza olanak tanır .

Swift, öğrenmesi ve kullanması kolay olmaya odaklanarak, düşük seviyeli sistem programlamasından yüksek seviyeli komut dosyalarına kadar uzanan cesur bir hedefe sahip. Swift'in öğrenmesi ve kullanması kolay ama aynı zamanda güçlü olması gerektiğinden , karmaşıklığın maliyetini bu karmaşıklıktan yararlanan insanlara agresif bir şekilde etkileyen karmaşıklığın aşamalı olarak açıklanması ilkesine dayanır. Yüksek performansla birleştirilen "komut dosyası dili hissi", makine öğrenimi için çok yararlıdır.

Swift tasarımının son bir ilgili yönü, Swift dilinin çoğunun aslında standart kitaplığında uygulanmış olmasıdır. Int ve Bool gibi "yerleşik" türler, aslında sihirli türleri ve işlemleri saran standart kitaplıkta tanımlanan yapılardır . Bu nedenle, bazen Swift'in sadece "LLVM için sözdizimsel şeker" olduğu konusunda şaka yapıyoruz.

Swift hakkında harika olan çok şey ve çevrimiçi olarak kullanılabilen tonlarca içerik var. Genel Swift programlama kavramları hakkında daha fazla bilgi edinmekle ilgileniyorsanız, başlamak için birkaç bağlantı aşağıda verilmiştir:

Bir uyarı: Swift, ilk yıllarında hızla gelişti, bu nedenle Swift 3'ten önce (2016'da piyasaya sürüldü) her şeye dikkat etmelisiniz.

Neden TensorFlow için Swift?

TensorFlow için Swift, makine öğrenimi modelleri geliştirmenin yeni bir yoludur. Doğrudan Swift programlama diline entegre edilmiş TensorFlow'un gücünü verir. Makine öğrenimi paradigmalarının birinci sınıf dil ve derleyici desteğini hak edecek kadar önemli olduğuna inanıyoruz.

Makine öğreniminde temel bir ilkel, gradyan tabanlı optimizasyondur: parametreleri optimize etmek için hesaplama işlevi türevleri. Swift for TensorFlow ile, gradient(of:) gibi diferansiyel operatörleri kullanarak fonksiyonları kolayca ayırt edebilir veya gradient(in:) yöntemini çağırarak tüm modele göre farklılaştırabilirsiniz. Bu farklılaştırma API'leri sadece Tensor ilgili kavramlar için mevcut değildir - Float , Double , SIMD vektörleri ve kendi veri yapılarınız dahil olmak üzere Differentiable protokole uyan tüm tipler için genelleştirilmiştir.

// Custom differentiable type.
struct Model: Differentiable {
    var w: Float
    var b: Float
    func applied(to input: Float) -> Float {
        return w * input + b
    }
}

// Differentiate using `gradient(at:_:in:)`.
let model = Model(w: 4, b: 3)
let input: Float = 2
let (𝛁model, 𝛁input) = gradient(at: model, input) { model, input in
    model.applied(to: input)
}

print(𝛁model) // Model.TangentVector(w: 2.0, b: 1.0)
print(𝛁input) // 4.0

TensorFlow için Swift projesi, türevlerin ötesinde, kullanıcıları daha üretken kılmak için gelişmiş bir araç zinciri ile birlikte gelir. Swift'i bir Jupyter not defterinde etkileşimli olarak çalıştırabilir ve modern bir derin öğrenme kitaplığının devasa API yüzeyini keşfetmenize yardımcı olacak yararlı otomatik tamamlama önerileri alabilirsiniz. Saniyeler içinde tarayıcınızdan başlayabilirsiniz!

Swift'in güçlü Python entegrasyonu sayesinde TensorFlow için Swift'e geçiş gerçekten çok kolay. Python kodunuzu aşamalı olarak taşıyabilirsiniz (veya en sevdiğiniz Python kitaplıklarını kullanmaya devam edebilirsiniz), çünkü sevdiğiniz Python kitaplığınızı tanıdık bir sözdizimiyle kolayca çağırabilirsiniz:

import TensorFlow
import Python

let np = Python.import("numpy")

let array = np.arange(100).reshape(10, 10)  // Create a 10x10 numpy array.
let tensor = Tensor<Float>(numpy: array)  // Seamless integration!