Swift dla TensorFlow (w trybie archiwum)

Swift dla TensorFlow był eksperymentem na platformie nowej generacji do uczenia maszynowego, obejmującym najnowsze badania z zakresu uczenia maszynowego, kompilatorów, programowania różniczkowego, projektowania systemów i nie tylko. Archiwizacja odbyła się w lutym 2021 r. Do znaczących osiągnięć tego projektu należą:

Ta witryna nie będzie otrzymywać dalszych aktualizacji. Dokumentacja API i pliki binarne do pobrania 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 wciąż rosnącą bazę użytkowników. Wybraliśmy Swift, ponieważ ma proces projektowania w otwartym języku i ze specyficznych powodów technicznych szczegółowo opisanych w dokumencie „ Dlaczego Swift dla TensorFlow ”. Zakładamy, że większość czytelników nie jest z nim zaznajomiona, dlatego pokrótce poruszymy tutaj kilka dodatkowych ważnych rzeczy na ten temat.

Rozwój Swifta rozpoczął się w 2010 roku i miał na celu połączenie najlepszych praktyk w projektowaniu języków programowania w jeden system, zamiast szukać nowości akademickich lub religijnie propagować metodologie programowania. W rezultacie obsługuje rozwój wielu paradygmatów (np. funkcjonalny, OOP, ogólny, proceduralny itp.) wszystko w jednym systemie i wykorzystuje wiele dobrze znanych koncepcji z języków akademickich (np. dopasowywanie wzorców , algebraiczne typy danych i klasy typów). na czoło. Zamiast mocno zachęcać programistów do przepisania całego swojego kodu w Swift, pragmatycznie skupia 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 śmiały cel, aby obejmować wszystko, od programowania systemów niskiego poziomu po skrypty wysokiego poziomu, ze szczególnym naciskiem na łatwość nauki i obsługi . 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 przenosi koszt złożoności na ludzi, którzy z tej złożoności korzystają. „Wyczucie języka skryptowego” w połączeniu z wysoką wydajnością jest bardzo przydatne w uczeniu maszynowym.

Ostatnim istotnym aspektem projektu Swifta jest to, że znaczna część języka Swift jest faktycznie zaimplementowana w jego standardowej bibliotece. Typy „wbudowane”, takie jak Int i Bool, to tak naprawdę struktury zdefiniowane w standardowej bibliotece, które otaczają magiczne typy i operacje. W związku z tym czasami żartujemy, że Swift to po prostu „cukier składniowy 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 Swift, oto kilka linków, od których możesz zacząć:

Jedno ostrzeżenie: Swift ewoluował szybko w pierwszych latach swojej działalności, więc przed Swiftem 3 (wydanym w 2016 r.) należy zachować ostrożność.

Dlaczego Swift dla TensorFlow?

Swift dla TensorFlow to nowy sposób tworzenia modeli uczenia maszynowego. Daje Ci moc TensorFlow bezpośrednio zintegrowaną z językiem programowania Swift . Wierzymy, że paradygmaty uczenia maszynowego są na tyle ważne, że zasługują na pierwszorzędne wsparcie językowe i kompilatorowe .

Podstawowym elementem uczenia maszynowego jest optymalizacja oparta na gradientach: obliczanie pochodnych funkcji w celu optymalizacji parametrów. Dzięki Swift dla TensorFlow możesz łatwo różnicować funkcje za pomocą operatorów różniczkowych, takich jak gradient(of:) , lub różnicować w odniesieniu do całego modelu, wywołując metodę gradient(in:) . Te interfejsy API różnicowania są dostępne nie tylko dla koncepcji związanych z Tensor — są uogólnione dla wszystkich typów zgodnych z protokołem Differentiable , w tym wektorów Float , Double , SIMD i 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 instrumentów pochodnych projekt Swift for TensorFlow zawiera wyrafinowany zestaw narzędzi, dzięki którym użytkownicy mogą zwiększyć produktywność. Możesz uruchomić Swift interaktywnie w notatniku Jupyter i uzyskać pomocne sugestie autouzupełniania, które pomogą Ci eksplorować ogromną powierzchnię API nowoczesnej biblioteki głębokiego uczenia się. Możesz rozpocząć pracę bezpośrednio w przeglądarce w ciągu kilku sekund !

Migracja do Swift dla TensorFlow jest naprawdę łatwa dzięki potężnej integracji z Pythonem w Swift. Możesz stopniowo migrować swój kod Pythona (lub nadal korzystać z 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!