Google I/O にご注目いただきありがとうございます。すべてのセッションをオンデマンドで表示オンデマンドで見る

Swift for TensorFlow(アーカイブモード)

Swift for TensorFlowは、機械学習、コンパイラ、微分可能プログラミング、システム設計などにわたる最新の研究を組み込んだ、機械学習のための次世代プラットフォームでの実験でした。 2021年2月にアーカイブされました。このプロジェクトの重要な成果は次のとおりです。

このサイトはそれ以上の更新を受け取りません。 APIドキュメントとバイナリのダウンロードは、 Open DesignReviewの会議の記録と同様に引き続きアクセスできます。

迅速

Swiftはオープンソースの汎用プログラミング言語であり、ユーザーベースは大きく成長しています。 Swiftを選択したのは、オープンな言語設計プロセスがあり、「 Swift forTensorFlow 」ドキュメントで詳しく説明されている特定の技術的な理由からです。ほとんどの読者はそれに慣れていないことを前提としているので、ここでそれに関するいくつかの追加の重要な事柄に簡単に触れます。

Swiftの開発は、2010年に開始され、学術的な目新しさを追求したり、プログラミング方法論を宗教的に広めたりするのではなく、プログラミング言語設計のベストプラクティスを1つのシステムにまとめることを目的としていました。その結果、マルチパラダイム開発(機能、OOP、汎用、手続き型など)をすべて1つのシステムでサポートし、学術言語(パターンマッチング代数的データ型、型クラスなど)から多くの有名な概念をもたらします最前線に。開発者にSwiftですべてのコードを書き直すよう強く勧めるのではなく、他の言語との相互運用性に実用的に焦点を当てています。たとえば、Cヘッダーファイルを直接インポートしてFFIなしで使用できるようにし、(現在は)ラッパーなしでPythonAPIを使用できるようにします。 。

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関連の概念で利用できるだけでなく、 FloatDouble 、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統合のおかげで、TensorFlow用のSwiftへの移行は非常に簡単です。おなじみの構文でお気に入りの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!