Swift für TensorFlow (im Archivmodus)

Swift for TensorFlow war ein Experiment in der Plattform der nächsten Generation für maschinelles Lernen, das die neuesten Forschungsergebnisse aus den Bereichen maschinelles Lernen, Compiler, differenzierbare Programmierung, Systemdesign und mehr umfasste. Es wurde im Februar 2021 archiviert. Einige bedeutende Erfolge dieses Projekts sind:

Diese Seite erhält keine weiteren Updates. Auf die API-Dokumentation und die binären Downloads sowie die Aufzeichnungen der Open Design Review-Besprechungen wird weiterhin zugegriffen.

Schnell

Swift ist eine Open-Source -Programmiersprache für allgemeine Zwecke mit einer großen und wachsenden Benutzerbasis. Wir haben uns für Swift entschieden, weil es einen offenen Sprachentwurfsprozess hat und aus bestimmten technischen Gründen im Dokument " Warum Swift für TensorFlow " beschrieben wird. Wir gehen davon aus, dass die meisten Leser damit nicht vertraut sind, daher werden wir hier kurz auf einige weitere wichtige Dinge eingehen.

Die Entwicklung von Swift begann im Jahr 2010 und zielte darauf ab, die Best Practices für das Design von Programmiersprachen in einem System zusammenzuführen, anstatt nach akademischen Neuheiten zu suchen oder Programmiermethoden religiös zu verbreiten. Infolgedessen unterstützt es die Entwicklung mehrerer Paradigmen (z. B. funktional, OOP, generisch, prozedural usw.) in einem System und bringt viele bekannte Konzepte aus akademischen Sprachen (z. B. Mustervergleich , algebraische Datentypen und Typklassen). in den Vordergrund. Anstatt Entwickler nachdrücklich zu ermutigen, ihren gesamten Code in Swift neu zu schreiben, konzentriert es sich pragmatisch auf die Interoperabilität mit anderen Sprachen, z. B. können Sie C-Header-Dateien direkt importieren und ohne FFI verwenden und (jetzt) ​​Python-APIs ohne Wrapper verwenden .

Swift hat das kühne Ziel, von der Programmierung von Systemen auf niedriger Ebene bis hin zur Skripterstellung auf hoher Ebene zu reichen, wobei der Schwerpunkt darauf liegt, einfach zu erlernen und zu verwenden . Da Swift einfach zu erlernen und zu verwenden sein muss, aber auch leistungsstark, muss es auf dem Prinzip der fortschreitenden Offenlegung von Komplexität beruhen, das die Kosten der Komplexität für die Personen, die von dieser Komplexität profitieren, aggressiv beeinflusst. Das "Gefühl der Skriptsprache" in Kombination mit hoher Leistung ist sehr nützlich für maschinelles Lernen.

Ein letzter relevanter Aspekt des Entwurfs von Swift ist, dass ein Großteil der Swift-Sprache tatsächlich in seiner Standardbibliothek implementiert ist. "Eingebaute" Typen wie Int und Bool sind eigentlich nur Strukturen, die in der Standardbibliothek definiert sind und magische Typen und Operationen umschließen. Daher scherzen wir manchmal, dass Swift nur "syntaktischer Zucker für LLVM" ist.

Es gibt noch viel mehr Cooles an Swift und eine Menge online verfügbarer Inhalte. Wenn Sie mehr über allgemeine Swift-Programmierkonzepte erfahren möchten, finden Sie hier einige Links, um loszulegen:

Eine Warnung: Swift hat sich in den Anfangsjahren rasant weiterentwickelt, daher sollten Sie vor Swift 3 (veröffentlicht im Jahr 2016) mit allem vorsichtig sein.

Warum schnell für TensorFlow?

Swift for TensorFlow ist eine neue Methode zur Entwicklung von Modellen für maschinelles Lernen. Sie erhalten die Leistung von TensorFlow, das direkt in die Programmiersprache Swift integriert ist . Wir glauben, dass Paradigmen des maschinellen Lernens so wichtig sind, dass sie erstklassige Sprach- und Compilerunterstützung verdienen.

Ein grundlegendes Grundelement beim maschinellen Lernen ist die gradientenbasierte Optimierung: Berechnen von Funktionsableitungen zur Optimierung von Parametern. Mit Swift for TensorFlow können Sie Funktionen einfach mithilfe von Differentialoperatoren wie gradient(of:) oder in Bezug auf ein gesamtes Modell unterscheiden, indem Sie method gradient(in:) aufrufen. Diese Differenzierungs-APIs sind nicht nur für Tensor bezogene Konzepte verfügbar, sondern werden für alle Typen verallgemeinert, die dem Differentiable Protokoll entsprechen, einschließlich Float , Double , SIMD-Vektoren und Ihrer eigenen Datenstrukturen.

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

Neben Derivaten verfügt das Swift for TensorFlow-Projekt über eine ausgefeilte Toolchain, um die Produktivität der Benutzer zu steigern. Sie können Swift interaktiv in einem Jupyter-Notizbuch ausführen und hilfreiche Vorschläge zur automatischen Vervollständigung erhalten, um die massive API-Oberfläche einer modernen Deep-Learning-Bibliothek zu erkunden. Sie können in Sekundenschnelle direkt in Ihrem Browser loslegen !

Die Migration zu Swift für TensorFlow ist dank der leistungsstarken Python-Integration von Swift sehr einfach. Sie können Ihren Python-Code schrittweise migrieren (oder weiterhin Ihre bevorzugten Python-Bibliotheken verwenden), da Sie Ihre bevorzugte Python-Bibliothek problemlos mit einer vertrauten Syntax aufrufen können:

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!