¡Confirme su asistencia a su evento local de TensorFlow Everywhere hoy!
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Swift para TensorFlow (en modo de archivo)

Swift para TensorFlow fue un experimento en la plataforma de próxima generación para el aprendizaje automático, que incorporó las últimas investigaciones sobre aprendizaje automático, compiladores, programación diferenciable, diseño de sistemas y más. Se archivó en febrero de 2021. Algunos logros importantes de este proyecto incluyen:

Este sitio no recibirá más actualizaciones. La documentación de la API y las descargas binarias seguirán estando disponibles, así como las grabaciones de la reunión de Open Design Review .

Rápido

Swift es un lenguaje de programación de uso general de código abierto , que tiene una base de usuarios grande y creciente. Elegimos Swift porque tiene un proceso de diseño de lenguaje abierto y por razones técnicas específicas que se detallan en el documento " Por qué Swift para TensorFlow ". Suponemos que la mayoría de los lectores no están familiarizados con él, por lo que abordaremos brevemente algunos aspectos importantes adicionales al respecto aquí.

El desarrollo de Swift comenzó en 2010 y tenía como objetivo reunir las mejores prácticas en el diseño de lenguajes de programación en un solo sistema en lugar de intentar la novedad académica o propagar religiosamente metodologías de programación. Como resultado, es compatible con el desarrollo de múltiples paradigmas (por ejemplo, funcional, OOP, genérico, procedimental, etc.) todo en un sistema y trae muchos conceptos bien conocidos de lenguajes académicos (por ejemplo , coincidencia de patrones , tipos de datos algebraicos y clases de tipos) a la vanguardia. En lugar de alentar fuertemente a los desarrolladores a reescribir todo su código en Swift, se enfoca pragmáticamente en la interoperabilidad con otros lenguajes, por ejemplo, permitiéndole importar directamente archivos de encabezado C y usarlos sin un FFI y (ahora) la capacidad de usar las API de Python sin envoltorios .

Swift tiene el audaz objetivo de abarcar desde la programación de sistemas de bajo nivel hasta las secuencias de comandos de alto nivel, con un enfoque en que sea fácil de aprender y usar . Debido a que Swift debe ser fácil de aprender y usar, pero también poderoso, se basa en el principio de divulgación progresiva de la complejidad , que factoriza agresivamente el costo de la complejidad en las personas que se benefician de esa complejidad. La "sensación del lenguaje de secuencias de comandos" combinada con un alto rendimiento es muy útil para el aprendizaje automático.

Un último aspecto pertinente del diseño de Swift es que gran parte del lenguaje Swift está realmente implementado en su biblioteca estándar. Los tipos "incorporados" como Int y Bool son en realidad solo estructuras definidas en la biblioteca estándar que envuelven tipos y operaciones mágicas. Como tal, a veces bromeamos diciendo que Swift es simplemente "azúcar sintáctico para LLVM".

Hay muchas más cosas interesantes sobre Swift y un montón de contenido disponible en línea. Si está interesado en aprender más sobre los conceptos generales de programación de Swift, aquí hay algunos enlaces para comenzar:

Una advertencia: Swift evolucionó rápidamente en sus primeros años, por lo que debe tener cuidado con cualquier cosa antes de Swift 3 (lanzado en 2016).

¿Por qué Swift para TensorFlow?

Swift para TensorFlow es una nueva forma de desarrollar modelos de aprendizaje automático. Le brinda el poder de TensorFlow directamente integrado en el lenguaje de programación Swift . Creemos que los paradigmas del aprendizaje automático son tan importantes que merecen un lenguaje y un compilador de primera clase .

Una primitiva fundamental en el aprendizaje automático es la optimización basada en gradientes: calcular derivadas de funciones para optimizar parámetros. Con Swift para TensorFlow, puedes diferenciar funciones fácilmente usando operadores diferenciales como gradient(of:) , o diferenciar con respecto a un modelo completo llamando al método gradient(in:) . Estas API de diferenciación no solo están disponibles para conceptos relacionados con Tensor , sino que están generalizadas para todos los tipos que se ajustan al protocolo Differentiable , incluidos los vectores Float , Double , SIMD y sus propias estructuras de datos.

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

Más allá de los derivados, el proyecto Swift for TensorFlow viene con una cadena de herramientas sofisticada para que los usuarios sean más productivos. Puede ejecutar Swift de forma interactiva en un cuaderno de Jupyter y obtener sugerencias útiles de autocompletado para ayudarlo a explorar la enorme superficie de API de una biblioteca de aprendizaje profundo moderna. ¡Puede comenzar directamente en su navegador en segundos !

Migrar a Swift para TensorFlow es realmente fácil gracias a la poderosa integración de Python de Swift. Puede migrar gradualmente su código de Python (o continuar usando sus bibliotecas de Python favoritas), porque puede llamar fácilmente a su biblioteca de Python favorita con una sintaxis familiar:

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!