TensorFlow için Swift (Arşiv Modunda)

TensorFlow için Swift, makine öğrenimi, derleyiciler, farklılaştırılabilir programlama, sistem tasarımı ve ötesindeki en son araştırmaları birleştiren 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 almayacaktır. API belgeleri ve ikili dosya indirmelerinin yanı sıra Açık Tasarım İncelemesi toplantı kayıtlarına da erişilebilir olmaya devam edecektir.

Süratli

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

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

Swift , öğrenmesi ve kullanması kolay olmaya odaklanarak, düşük seviyeli sistem programlamadan yüksek seviyeli komut dosyaları yazmaya kadar tüm yolu kapsayan cüretkar bir hedefe sahiptir. 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 çarpan karmaşıklığın aşamalı olarak ifşa edilmesi ilkesine dayanır. Yüksek performansla birleşen "komut dosyası dili hissi", makine öğrenimi için çok faydalıdır.

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

Swift hakkında harika olan çok daha fazlası ve çevrimiçi olarak mevcut tonlarca içerik var. Genel Swift programlama kavramları hakkında daha fazla bilgi edinmek istiyorsanız, başlamanız için işte birkaç bağlantı:

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

Neden TensorFlow için Swift?

TensorFlow için Swift, makine öğrenimi modelleri geliştirmenin yeni bir yoludur. Size 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 öğrenimindeki temel bir ilkel, gradyan tabanlı optimizasyondur: parametreleri optimize etmek için fonksiyon türevlerinin hesaplanması. TensorFlow için Swift ile, gradient(of:) gibi diferansiyel operatörleri kullanarak işlevleri 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 yalnızca Tensor ile ilgili kavramlar için mevcut değildir; Float , Double , SIMD vektörleri ve kendi veri yapılarınız dahil Differentiable protokole uygun tüm türler 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

Türevlerin ötesinde Swift for TensorFlow projesi, kullanıcıları daha üretken kılmak için gelişmiş bir araç zinciriyle 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 doğrudan tarayıcınızdan başlayabilirsiniz !

Swift'in güçlü Python entegrasyonu sayesinde TensorFlow için Swift'e geçiş gerçekten kolaydır. Python kodunuzu aşamalı olarak taşıyabilir (veya favori Python kitaplıklarınızı kullanmaya devam edebilirsiniz), çünkü favori Python kitaplığınızı tanıdık bir sözdizimi ile kolayca arayabilirsiniz:

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!