Swift for TensorFlow (w trybie archiwum)

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Swift for TensorFlow był eksperymentem na platformie nowej generacji do uczenia maszynowego, obejmującym najnowsze badania z zakresu uczenia maszynowego, kompilatorów, programowania różnicowalnego, projektowania systemów i nie tylko. Został zarchiwizowany w lutym 2021 r. Do ważnych osiągnięć tego projektu należą:

Ta witryna nie będzie otrzymywać dalszych aktualizacji. Dokumentacja API i pliki do pobrania binarne będą nadal dostępne, podobnie jak nagrania spotkań Open Design Review .

Szybki

Swift to język programowania ogólnego przeznaczenia typu open source , który ma dużą i stale rosnącą bazę użytkowników. Wybraliśmy Swift, ponieważ ma otwarty proces projektowania języka i ze względów technicznych szczegółowo opisanych w dokumencie „ Why Swift for TensorFlow ”. Zakładamy, że większość czytelników go nie zna, więc pokrótce omówimy tutaj kilka dodatkowych ważnych rzeczy na jego temat.

Rozwój Swift rozpoczął się w 2010 roku i miał na celu połączenie najlepszych praktyk w projektowaniu języków programowania w jednym systemie, zamiast próbować wprowadzać akademickie nowości lub religijnie propagować metodologie programowania. W rezultacie obsługuje tworzenie wielu paradygmatów (np. Funkcjonalne, OOP, ogólne, proceduralne itp.) W jednym systemie i zawiera wiele dobrze znanych pojęć z języków akademickich (np. Dopasowywanie wzorców , algebraiczne typy danych i klasy typów) na pierwszy plan. Zamiast mocno zachęcać programistów do przepisania całego kodu w Swift, pragmatycznie koncentruje się na interoperacyjności z innymi językami, np. Umożliwiając bezpośrednie importowanie plików nagłówkowych C i używanie ich bez FFI oraz (teraz) możliwość korzystania z API Pythona bez opakowań .

Swift ma odważny cel, jakim jest od programowania systemów niskiego poziomu do tworzenia skryptów wysokiego poziomu, z naciskiem na łatwość uczenia się i użytkowania . Ponieważ Swift musi być łatwy do nauczenia i używania, ale także potężny, opiera się na zasadzie stopniowego ujawniania złożoności , która agresywnie wpływa na koszt złożoności dla osób, które z niej korzystają. Wrażenie języka skryptowego w połączeniu z wysoką wydajnością jest bardzo przydatne w uczeniu maszynowym.

Ostatnim istotnym aspektem projektu Swift jest to, że znaczna część języka Swift jest faktycznie zaimplementowana w jego bibliotece standardowej. Typy „wbudowane”, takie jak Int i Bool, to w rzeczywistości struktury zdefiniowane w standardowej bibliotece, które zawijają magiczne typy i operacje. W związku z tym czasami żartujemy, że Swift jest po prostu „cukrem syntaktycznym dla LLVM”.

Jest o wiele więcej fajnych rzeczy w Swift i mnóstwo treści dostępnych online. Jeśli chcesz dowiedzieć się więcej o ogólnych koncepcjach programowania w języku Swift, oto kilka linków ułatwiających rozpoczęcie:

Jedno ostrzeżenie: Swift ewoluował szybko we wczesnych latach, więc powinieneś uważać na wszystko przed Swift 3 (wydanym w 2016 roku).

Dlaczego Swift dla TensorFlow?

Swift for TensorFlow to nowy sposób tworzenia modeli uczenia maszynowego. Zapewnia moc TensorFlow bezpośrednio zintegrowaną z językiem programowania Swift . Uważamy, że paradygmaty uczenia maszynowego są tak ważne, że zasługują na najwyższej klasy obsługę języka i kompilatora .

Podstawowym prymitywem w uczeniu maszynowym jest optymalizacja oparta na gradientach: obliczanie pochodnych funkcji w celu optymalizacji parametrów. Dzięki Swift for TensorFlow możesz łatwo różnicować funkcje za pomocą operatorów różnicowych, takich jak gradient(of:) , lub różnicować w odniesieniu do całego modelu, wywołując metodę gradient(in:) . Te API różnicowania są nie tylko dostępne dla Tensor kondensatorem-koncepcje są uogólnione dla wszystkich typów, które są zgodne z Differentiable protokół obejmujący Float , Double , SIMD wektorów oraz własnych struktur danych.

// 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

Oprócz produktów pochodnych projekt Swift for TensorFlow zawiera wyrafinowany łańcuch narzędzi zwiększający produktywność użytkowników. Możesz uruchomić Swift interaktywnie w notatniku Jupyter i uzyskać pomocne sugestie dotyczące autouzupełniania, które pomogą Ci odkryć ogromną powierzchnię interfejsu API nowoczesnej biblioteki głębokiego uczenia. Możesz rozpocząć pracę bezpośrednio w przeglądarce w kilka sekund !

Migracja do Swift dla TensorFlow jest naprawdę łatwa dzięki zaawansowanej integracji Swift z Pythonem. Możesz stopniowo migrować swój kod Pythona (lub nadal używać swoich ulubionych bibliotek Pythona), ponieważ możesz łatwo wywołać swoją ulubioną bibliotekę Pythona za pomocą znanej składni:

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!