Odpowiedz już dziś na lokalne wydarzenie TensorFlow Everywhere!
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Swift for TensorFlow (w trybie archiwum)

Swift for TensorFlow był eksperymentem na platformie nowej generacji do uczenia maszynowego, obejmującym najnowsze badania z zakresu uczenia maszynowego, kompilatorów, programowania zróżnicowanego, projektowania systemów i nie tylko. Został zarchiwizowany 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 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ęzyka 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 koncepcji z języków akademickich (np. Dopasowywanie wzorców , algebraiczne typy danych i klasy typów) na pierwszy plan. Zamiast silnie 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ść nauki i użytkowania . Ponieważ Swift musi być łatwy do nauczenia się 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ą. „Czucie 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, aby rozpocząć:

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 gradiencie: 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 interfejsy API różnicowania są dostępne nie tylko dla pojęć 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 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!