Reserve a data! O Google I / O retorna de 18 a 20 de maio Registre-se agora
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Swift para TensorFlow (no modo de arquivo)

O Swift for TensorFlow foi um experimento na plataforma de próxima geração para aprendizado de máquina, incorporando as pesquisas mais recentes em aprendizado de máquina, compiladores, programação diferenciada, design de sistemas e muito mais. Foi arquivado em fevereiro de 2021. Algumas conquistas significativas deste projeto incluem:

Este site não receberá mais atualizações. A documentação da API e os downloads binários continuarão acessíveis, bem como as gravações das reuniões do Open Design Review .

Rápido

Swift é uma linguagem de programação de código aberto de propósito geral, que possui uma grande e crescente base de usuários. Escolhemos o Swift porque ele tem um processo de design de linguagem aberta e por motivos técnicos específicos detalhados no documento " Por que o Swift para TensorFlow ". Presumimos que a maioria dos leitores não esteja familiarizada com ele, portanto, tocaremos brevemente em algumas coisas importantes adicionais sobre ele aqui.

O desenvolvimento do Swift começou em 2010 e teve como objetivo reunir as melhores práticas em design de linguagem de programação em um sistema, em vez de tentar novidades acadêmicas ou propagar religiosamente metodologias de programação. Como resultado, ele suporta o desenvolvimento multiparadigma (por exemplo, funcional, OOP, genérico, procedural, etc) tudo em um sistema e traz muitos conceitos conhecidos de linguagens acadêmicas (por exemplo, correspondência de padrões , tipos de dados algébricos e classes de tipo) na vanguarda. Em vez de encorajar fortemente os desenvolvedores a reescrever todo o seu código em Swift, ele se concentra pragmaticamente na interoperabilidade com outras linguagens, por exemplo, permitindo que você importe diretamente arquivos de cabeçalho C e os use sem um FFI e (agora) a capacidade de usar APIs Python sem wrappers .

O Swift tem o objetivo audacioso de abranger desde a programação de sistemas de baixo nível até os scripts de alto nível, com foco em ser fácil de aprender e usar . Como o Swift precisa ser fácil de aprender e usar, mas também poderoso, ele se baseia no princípio da divulgação progressiva da complexidade , que fatura agressivamente o custo da complexidade para as pessoas que se beneficiam dessa complexidade. A "sensação de linguagem de script" combinada com alto desempenho é muito útil para o aprendizado de máquina.

Um aspecto final pertinente do design do Swift é que grande parte da linguagem Swift é realmente implementada em sua biblioteca padrão. Tipos "internos" como Int e Bool são na verdade apenas estruturas definidas na biblioteca padrão que envolvem tipos e operações mágicas. Como tal, às vezes brincamos que Swift é apenas "açúcar sintático para LLVM".

Há muito mais coisas legais sobre o Swift e uma tonelada de conteúdo disponível online. Se você estiver interessado em aprender mais sobre os conceitos gerais de programação Swift, aqui estão alguns links para começar:

Um aviso: o Swift evoluiu rapidamente em seus primeiros anos, então você deve ter cuidado com qualquer coisa antes do Swift 3 (lançado em 2016).

Por que Swift para TensorFlow?

Swift para TensorFlow é uma nova maneira de desenvolver modelos de aprendizado de máquina. Ele oferece o poder do TensorFlow integrado diretamente à linguagem de programação Swift . Acreditamos que os paradigmas de aprendizado de máquina são tão importantes que merecem linguagem de primeira classe e suporte de compilador .

Uma primitiva fundamental no aprendizado de máquina é a otimização baseada em gradiente: derivadas de funções de computação para otimizar parâmetros. Com o Swift para TensorFlow, você pode facilmente diferenciar funções usando operadores diferenciais como gradient(of:) , ou diferenciar em relação a um modelo inteiro chamando o método gradient(in:) . Essas APIs de diferenciação não estão disponíveis apenas para conceitos relacionados ao Tensor - elas são generalizadas para todos os tipos que estão em conformidade com o protocolo Differentiable , incluindo Float , Double , vetores SIMD e suas próprias estruturas de dados.

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

Além dos derivados, o projeto Swift for TensorFlow vem com um conjunto de ferramentas sofisticado para tornar os usuários mais produtivos. Você pode executar o Swift interativamente em um bloco de notas Jupyter e obter sugestões úteis de preenchimento automático para ajudá-lo a explorar a enorme superfície de API de uma biblioteca de aprendizado profundo moderna. Você pode começar diretamente no seu navegador em segundos !

Migrar para o Swift para TensorFlow é muito fácil graças à poderosa integração Python do Swift. Você pode migrar incrementalmente seu código Python (ou continuar a usar suas bibliotecas Python favoritas), porque você pode facilmente chamar sua biblioteca Python favorita com uma sintaxe 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!