RSVP для вашего местного мероприятия TensorFlow Everywhere сегодня!
Эта страница переведена с помощью Cloud Translation API.
Switch to English

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 для 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!