Swift для TensorFlow (в режиме архива)

Swift для TensorFlow — это эксперимент с платформой машинного обучения нового поколения, включающий в себя новейшие исследования в области машинного обучения, компиляторов, дифференцируемого программирования, проектирования систем и многого другого. Он был заархивирован в феврале 2021 года. Некоторые важные достижения этого проекта включают:

Этот сайт не будет получать дальнейшие обновления. Документация по API и загружаемые двоичные файлы будут по-прежнему доступны, а также записи совещаний Open Design Review .

Быстрый

Swift — это язык программирования общего назначения с открытым исходным кодом , который имеет большую и постоянно растущую базу пользователей. Мы выбрали Swift, потому что он имеет открытый процесс разработки языка и по конкретным техническим причинам, подробно описанным в документе « Почему Swift для TensorFlow ». Мы предполагаем, что большинство читателей с ним не знакомы, поэтому кратко коснемся здесь некоторых дополнительных важных моментов.

Разработка Swift началась в 2010 году и была направлена ​​на объединение лучших практик в разработке языков программирования в одну систему, а не на поиск академических новинок или неукоснительное распространение методологий программирования. В результате он поддерживает разработку нескольких парадигм (например, функциональную, ООП, универсальную, процедурную и т. д.) в одной системе и объединяет множество хорошо известных концепций из академических языков (например, сопоставление с образцом , алгебраические типы данных и классы типов). на первый план. Вместо того, чтобы настоятельно поощрять разработчиков переписывать весь свой код на Swift, он прагматично фокусируется на совместимости с другими языками, например, позволяет напрямую импортировать файлы заголовков C и использовать их без FFI и (теперь) возможность использовать API Python без оболочек. .

Swift ставит перед собой смелую цель — охватить весь путь от системного программирования низкого уровня до написания сценариев высокого уровня, уделяя особое внимание простоте изучения и использования . Поскольку Swift должен быть простым в освоении и использовании, но при этом мощным, он опирается на принцип постепенного раскрытия сложности , который агрессивно перекладывает стоимость сложности на людей, которые получают от этой сложности выгоду. «Ощущение языка сценариев» в сочетании с высокой производительностью очень полезно для машинного обучения.

Последний важный аспект конструкции Swift заключается в том, что большая часть языка Swift фактически реализована в его стандартной библиотеке. «Встроенные» типы, такие как Int и Bool, на самом деле являются просто структурами, определенными в стандартной библиотеке, которые обертывают магические типы и операции. Поэтому иногда мы шутим, что Swift — это просто «синтаксический сахар для LLVM».

В Swift есть еще много интересного и масса контента, доступного в Интернете. Если вы хотите узнать больше об общих концепциях программирования на Swift, вот несколько ссылок для начала:

Одно предупреждение: Swift быстро развивался в первые годы своего существования, поэтому вам следует быть осторожными со всем, что было до Swift 3 (выпущенного в 2016 году).

Почему Swift для TensorFlow?

Swift для TensorFlow — это новый способ разработки моделей машинного обучения. Он дает вам возможности TensorFlow, напрямую интегрированные в язык программирования Swift . Мы считаем, что парадигмы машинного обучения настолько важны, что заслуживают первоклассной поддержки языка и компилятора .

Фундаментальным примитивом машинного обучения является оптимизация на основе градиента: вычисление производных функций для оптимизации параметров. Используя Swift для TensorFlow, вы можете легко дифференцировать функции, используя дифференциальные операторы, такие как gradient(of:) , или дифференцировать по всей модели, вызывая метод gradient(in:) . Эти API-интерфейсы дифференциации доступны не только для концепций, связанных с Tensor — они обобщены для всех типов, соответствующих протоколу Differentiable , включая векторы Float , Double , SIMD и ваши собственные структуры данных.

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

Помимо производных, проект Swift for TensorFlow включает в себя сложную цепочку инструментов, позволяющую повысить продуктивность работы пользователей. Вы можете запустить Swift в интерактивном режиме в блокноте Jupyter и получить полезные рекомендации по автозаполнению, которые помогут вам изучить огромную поверхность API современной библиотеки глубокого обучения. Вы можете начать работу прямо в браузере за считанные секунды !

Переход на Swift для TensorFlow действительно прост благодаря мощной интеграции Swift с Python. Вы можете постепенно переносить свой код Python (или продолжать использовать свои любимые библиотеки Python), поскольку вы можете легко вызвать свою любимую библиотеку Python со знакомым синтаксисом:

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!