RSVP per il tuo evento TensorFlow Everywhere locale oggi!
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Swift per TensorFlow (in modalità Archivio)

Swift per TensorFlow è stato un esperimento nella piattaforma di prossima generazione per l'apprendimento automatico, che incorpora le ultime ricerche su apprendimento automatico, compilatori, programmazione differenziabili, progettazione di sistemi e oltre. È stato archiviato nel febbraio 2021. Alcuni risultati significativi di questo progetto includono:

Questo sito non riceverà ulteriori aggiornamenti. La documentazione API e i download binari continueranno a essere accessibili così come le registrazioni delle riunioni di Open Design Review .

Swift

Swift è un linguaggio di programmazione generico open source , che ha una base di utenti ampia e in crescita. Abbiamo scelto Swift perché ha un processo di progettazione in linguaggio aperto e per motivi tecnici specifici descritti in dettaglio nel documento " Perché Swift per TensorFlow ". Partiamo dal presupposto che la maggior parte dei lettori non abbia familiarità con esso, quindi toccheremo brevemente alcune altre cose importanti al riguardo qui.

Lo sviluppo di Swift è iniziato nel 2010 e mirava a riunire le migliori pratiche nella progettazione del linguaggio di programmazione in un unico sistema piuttosto che cercare novità accademiche o propagare religiosamente metodologie di programmazione. Di conseguenza, supporta lo sviluppo multi-paradigma (ad esempio funzionale, OOP, generico, procedurale, ecc.) Tutto in un sistema e porta molti concetti ben noti dai linguaggi accademici (ad esempio corrispondenza di modelli , tipi di dati algebrici e classi di tipi) in prima linea. Invece di incoraggiare fortemente gli sviluppatori a riscrivere tutto il loro codice in Swift, si concentra pragmaticamente sull'interoperabilità con altri linguaggi, ad esempio, consentendo di importare direttamente file di intestazione C e utilizzarli senza un FFI e (ora) la possibilità di utilizzare API Python senza wrapper .

Swift ha l'obiettivo audace di spaziare dalla programmazione di sistemi di basso livello allo scripting di alto livello, con l'obiettivo di essere facile da imparare e da usare . Poiché Swift deve essere facile da apprendere e utilizzare ma anche potente, si basa sul principio della divulgazione progressiva della complessità , che calcola in modo aggressivo il costo della complessità sulle persone che beneficiano di tale complessità. La "sensazione del linguaggio di scripting" combinata con alte prestazioni è molto utile per l'apprendimento automatico.

Un ultimo aspetto pertinente del design di Swift è che gran parte del linguaggio Swift è effettivamente implementato nella sua libreria standard. I tipi "incorporati" come Int e Bool sono in realtà solo strutture definite nella libreria standard che racchiudono tipi e operazioni magiche. In quanto tale, a volte scherziamo dicendo che Swift è solo "zucchero sintattico per LLVM".

C'è molto di più interessante in Swift e un sacco di contenuti disponibili online. Se sei interessato a saperne di più sui concetti generali di programmazione Swift, ecco alcuni link per iniziare:

Un avvertimento: Swift si è evoluto rapidamente nei suoi primi anni, quindi dovresti fare attenzione a qualsiasi cosa prima di Swift 3 (rilasciato nel 2016).

Perché Swift per TensorFlow?

Swift per TensorFlow è un nuovo modo per sviluppare modelli di machine learning. Ti dà la potenza di TensorFlow direttamente integrato nel linguaggio di programmazione Swift . Riteniamo che i paradigmi di apprendimento automatico siano così importanti da meritare un supporto per linguaggio e compilatore di prima classe .

Una primitiva fondamentale nell'apprendimento automatico è l'ottimizzazione basata sul gradiente: derivati ​​di funzioni di calcolo per ottimizzare i parametri. Con Swift per TensorFlow, puoi facilmente differenziare le funzioni utilizzando operatori differenziali come gradient(of:) , o differenziare rispetto a un intero modello chiamando il metodo gradient(in:) . Queste API di differenziazione non sono disponibili solo per i concetti relativi a Tensor , ma sono generalizzate per tutti i tipi conformi al protocollo Differentiable , inclusi Float , Double , vettori SIMD e le proprie strutture dati.

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

Oltre ai derivati, il progetto Swift for TensorFlow viene fornito con una sofisticata toolchain per rendere gli utenti più produttivi. Puoi eseguire Swift in modo interattivo in un notebook Jupyter e ottenere utili suggerimenti per il completamento automatico per esplorare l'enorme superficie API di una moderna libreria di deep learning. Puoi iniziare direttamente nel tuo browser in pochi secondi !

Migrare a Swift per TensorFlow è davvero facile grazie alla potente integrazione Python di Swift. Puoi migrare in modo incrementale il tuo codice Python (o continuare a utilizzare le tue librerie Python preferite), perché puoi facilmente chiamare la tua libreria Python preferita con una sintassi familiare:

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!