Google I/O에 참여해 주셔서 감사합니다. 주문형 모든 세션 보기 주문형 시청

TensorFlow 용 Swift (아카이브 모드)

Swift for TensorFlow는 기계 학습, 컴파일러, 차별화 가능한 프로그래밍, 시스템 설계 등의 최신 연구를 통합 한 차세대 기계 학습 플랫폼의 실험이었습니다. 2021 년 2 월에 보관되었습니다.이 프로젝트의 중요한 성과는 다음과 같습니다.

이 사이트는 더 이상 업데이트를받지 않습니다. API 문서 및 바이너리 다운로드는 Open Design Review 회의 레코딩 뿐만 아니라 계속 액세스 할 수 있습니다.

빠른

Swift는 대규모 사용자 기반을 가진 오픈 소스 범용 프로그래밍 언어입니다. 개방형 언어 설계 프로세스가 있고 " Swift for TensorFlow "문서에 자세히 설명되어있는 특정 기술적 인 이유로 Swift 를 선택했습니다 . 우리는 대부분의 독자들이 그것에 익숙하지 않다고 가정하므로 여기에서 몇 가지 중요한 추가 사항에 대해 간략하게 설명하겠습니다.

Swift의 개발은 2010 년에 시작되었으며, 학문적 참신함을 추구하거나 프로그래밍 방법론을 종교적으로 전파하기보다는 프로그래밍 언어 설계의 모범 사례를 하나의 시스템으로 통합하는 것을 목표로했습니다. 그 결과 다중 패러다임 개발 (예 : 기능, OOP, 일반, 절차 등)을 모두 하나의 시스템에서 지원하고 학술 언어 (예 : 패턴 일치 , 대수 데이터 유형 및 유형 클래스)에서 잘 알려진 많은 개념을 가져옵니다. 최전선에. 대신 강하게 스위프트의 모든 개발자들이 코드를 다시 쓰게을 장려, 그것은 실용적으로 직접 수입 C 헤더 파일에 당신을 허용하고 않고 그들을 사용, 예를 들어, 다른 언어와의 상호 운용성에 초점을 맞추고 FFI 와 래퍼없이 파이썬 API를 사용하는 (지금) 능력 .

Swift는 배우고 사용하기 쉬운 것에 초점을 맞추고 저수준 시스템 프로그래밍에서 고수준 스크립팅에 이르기까지 모든 과정을 아우르는 대담한 목표를 가지고 있습니다 . Swift는 배우고 사용하기 쉬울뿐만 아니라 강력해야하기 때문에 복잡성점진적 공개 원칙에 의존합니다. 이는 복잡성의 혜택을받는 사람들에게 복잡성의 비용을 공격적으로 고려합니다. 고성능과 결합 된 "스크립팅 언어 느낌"은 기계 학습에 매우 유용합니다.

Swift 디자인의 마지막 관련 측면은 Swift 언어의 대부분이 실제로 표준 라이브러리에서 구현된다는 것입니다. IntBool 과 같은 "Builtin"유형은 실제로 매직 유형 및 작업을 래핑하는 표준 라이브러리에 정의 된 구조체 일뿐입니다. 따라서 때때로 우리는 Swift가 단지 "LLVM을위한 구문 설탕"이라고 농담합니다.

Swift와 온라인에서 사용할 수있는 수많은 콘텐츠에 대해 멋진 것이 더 많이 있습니다. 일반적인 Swift 프로그래밍 개념에 대해 더 배우고 싶다면 여기 몇 가지 링크를 통해 시작할 수 있습니다.

한 가지 경고 : Swift는 초기에 빠르게 진화 했으므로 Swift 3 (2016 년 출시) 이전에주의해야합니다.

TensorFlow 용 Swift가 필요한 이유

Swift for TensorFlow는 기계 학습 모델을 개발하는 새로운 방법입니다. Swift 프로그래밍 언어에 직접 통합 된 TensorFlow 의 강력한 기능을 제공합니다. 우리는 기계 학습 패러다임이 매우 중요하여 최고의 언어와 컴파일러 지원 을받을 자격이 있다고 믿습니다.

기계 학습의 기본 기본 요소는 기울기 기반 최적화입니다. 즉, 매개 변수를 최적화하기위한 함수 도함수를 계산합니다. Swift for TensorFlow를 사용하면 gradient(of:) 와 같은 미분 연산자를 사용하여 함수를 쉽게 구분하거나 gradient(in:) 메서드를 호출하여 전체 모델을 구분할 수 있습니다. 이러한 차별화 API는 Tensor 관련 개념에만 사용할 수있는 것이 아닙니다. Float , Double , SIMD 벡터 및 자체 데이터 구조를 포함하여 Differentiable 프로토콜을 준수하는 모든 유형에 대해 일반화됩니다.

// 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 프로젝트는 사용자의 생산성을 높이기위한 정교한 도구 모음과 함께 제공됩니다. Jupyter 노트북에서 Swift를 대화 형으로 실행하고 최신 딥 러닝 라이브러리의 방대한 API 표면을 탐색하는 데 도움이되는 유용한 자동 완성 제안을 얻을 수 있습니다. 몇 초 만에 브라우저에서 바로 시작할 수 있습니다!

Swift의 강력한 Python 통합 덕분에 Swift for TensorFlow로 마이그레이션하는 것은 정말 쉽습니다. 익숙한 구문으로 좋아하는 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!