RSVP pour votre événement TensorFlow Everywhere local dès aujourd'hui!
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Swift pour TensorFlow (en mode archive)

Swift pour TensorFlow était une expérience dans la plate-forme de nouvelle génération pour l'apprentissage automatique, intégrant les dernières recherches sur l'apprentissage automatique, les compilateurs, la programmation différenciable, la conception de systèmes et au-delà. Il a été archivé en février 2021. Certaines réalisations importantes de ce projet comprennent:

Ce site ne recevra plus de mises à jour. La documentation de l'API et les téléchargements binaires continueront d'être accessibles ainsi que les enregistrements de la réunion Open Design Review .

Rapide

Swift est un langage de programmation open source polyvalent, qui a une base d'utilisateurs large et croissante. Nous avons choisi Swift parce qu'il a un processus de conception de langage ouvert et pour des raisons techniques spécifiques détaillées dans le document « Pourquoi Swift pour TensorFlow ». Nous supposons que la plupart des lecteurs ne le connaissent pas, nous allons donc aborder brièvement quelques points importants supplémentaires à ce sujet ici.

Le développement de Swift a débuté en 2010 et visait à rassembler les meilleures pratiques de conception de langage de programmation dans un seul système plutôt que d'essayer la nouveauté académique ou de propager religieusement des méthodologies de programmation. En conséquence, il prend en charge le développement multi-paradigme (par exemple fonctionnel, POO, générique, procédural, etc.) dans un seul système, et apporte de nombreux concepts bien connus des langages académiques (par exemple , correspondance de modèles , types de données algébriques et classes de types) au premier plan. Au lieu d'encourager fortement les développeurs à réécrire tout leur code dans Swift, il se concentre de manière pragmatique sur l'interopérabilité avec d'autres langages, par exemple, vous permettant d'importer directement des fichiers d'en-tête C et de les utiliser sans FFI et (maintenant) la possibilité d'utiliser des API Python sans wrappers .

Swift a l'objectif audacieux de s'étendre de la programmation de systèmes de bas niveau à la création de scripts de haut niveau, en mettant l'accent sur la facilité d'apprentissage et d'utilisation . Parce que Swift doit être facile à apprendre et à utiliser mais aussi puissant, il repose sur le principe de la divulgation progressive de la complexité , qui répercute de manière agressive le coût de la complexité sur les personnes qui bénéficient de cette complexité. La "sensation de langage de script" associée à des performances élevées est très utile pour l'apprentissage automatique.

Un dernier aspect pertinent de la conception de Swift est qu'une grande partie du langage Swift est en fait implémentée dans sa bibliothèque standard. Les types "intégrés" comme Int et Bool ne sont en fait que des structures définies dans la bibliothèque standard qui encapsulent les types et les opérations magiques. En tant que tel, nous plaisantons parfois en disant que Swift n'est qu'un «sucre syntaxique pour LLVM».

Il y a beaucoup plus de cool à propos de Swift et une tonne de contenu disponible en ligne. Si vous souhaitez en savoir plus sur les concepts généraux de programmation Swift, voici quelques liens pour commencer:

Un avertissement: Swift a évolué rapidement au cours de ses premières années, vous devez donc faire attention à tout avant Swift 3 (sorti en 2016).

Pourquoi Swift pour TensorFlow?

Swift for TensorFlow est une nouvelle façon de développer des modèles d'apprentissage automatique. Il vous donne la puissance de TensorFlow directement intégré dans le langage de programmation Swift . Nous pensons que les paradigmes d'apprentissage automatique sont si importants qu'ils méritent un langage de premier ordre et un support de compilateur .

Une primitive fondamentale de l'apprentissage automatique est l'optimisation basée sur le gradient: calculer des dérivés de fonctions pour optimiser les paramètres. Avec Swift pour TensorFlow, vous pouvez facilement différencier les fonctions à l'aide d'opérateurs différentiels comme gradient(of:) , ou différencier par rapport à un modèle entier en appelant la méthode gradient(in:) . Ces API de différenciation ne sont pas uniquement disponibles pour les concepts liés à Tensor - elles sont généralisées pour tous les types conformes au protocole Differentiable , y compris les vecteurs Float , Double , SIMD et vos propres structures de données.

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

Au-delà des dérivés, le projet Swift for TensorFlow est livré avec une chaîne d'outils sophistiquée pour rendre les utilisateurs plus productifs. Vous pouvez exécuter Swift de manière interactive dans un bloc-notes Jupyter et obtenir des suggestions de saisie semi-automatique utiles pour vous aider à explorer l'énorme surface d'API d'une bibliothèque moderne d'apprentissage en profondeur. Vous pouvez démarrer directement dans votre navigateur en quelques secondes !

La migration vers Swift pour TensorFlow est vraiment facile grâce à la puissante intégration Python de Swift. Vous pouvez migrer progressivement votre code Python (ou continuer à utiliser vos bibliothèques Python préférées), car vous pouvez facilement appeler votre bibliothèque Python préférée avec une syntaxe familière:

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!