Swift for TensorFlowは、機械学習、コンパイラ、微分可能プログラミング、システム設計などにわたる最新の研究を組み込んだ、機械学習のための次世代プラットフォームでの実験でした。 2021年2月にアーカイブされました。このプロジェクトの重要な成果は次のとおりです。
- 言語に統合された微分可能プログラミングをSwift言語に追加しました。この作業は、公式のSwiftコンパイラで続行されます。
- 可変値セマンティクス指向の深層学習APIを開発しました
- さまざまな深層学習分野からの30以上のモデルを備えたモデルガーデンの開発を促進しました。
- ディープラーニングと3Dモーショントラッキング以降の確率的グラフィカルモデルを組み合わせた斬新な研究を可能にしました。
- pmapをサポートするGPU + CPUランタイムの(ほぼ)純粋なSwiftプロトタイプを搭載。
- 活発な開発が続けられている複数のオープンソース側の取り組みをスピンオフしました。
- PythonKit :PythonとSwiftの相互運用性。
- swift-jupyter :Jupyterノートブック内でSwiftを使用できるようにします。
- swift-benchmark :Swiftコード用の堅牢なベンチマークスイートを提供します。
- 他のいくつかのオープンソースの取り組みをスピンオフしました。
- 提案および実装されたSwift-evolutionの提案:
- SE-0195 :ユーザー定義の「動的メンバールックアップ」タイプ
- SE-0216 :ユーザー定義の動的に「呼び出し可能な」タイプを導入
- SE-0233 : NumericRefineを新しいAdditiveArithmeticプロトコルにする
- SE-0253 :ユーザー定義の名義型の呼び出し可能な値
このサイトはそれ以上の更新を受け取りません。 APIドキュメントとバイナリのダウンロードは、 Open DesignReviewの会議の記録と同様に引き続きアクセスできます。
迅速
Swiftはオープンソースの汎用プログラミング言語であり、ユーザーベースは大きく成長しています。 Swiftを選択したのは、オープンな言語設計プロセスがあり、「 Swift forTensorFlow 」ドキュメントで詳しく説明されている特定の技術的な理由からです。ほとんどの読者はそれに慣れていないことを前提としているので、ここでそれに関するいくつかの追加の重要な事柄に簡単に触れます。
Swiftの開発は、2010年に開始され、学術的な目新しさを追求したり、プログラミング方法論を宗教的に広めたりするのではなく、プログラミング言語設計のベストプラクティスを1つのシステムにまとめることを目的としていました。その結果、マルチパラダイム開発(機能、OOP、汎用、手続き型など)をすべて1つのシステムでサポートし、学術言語(パターンマッチング、 代数的データ型、型クラスなど)から多くの有名な概念をもたらします最前線に。開発者にSwiftですべてのコードを書き直すよう強く勧めるのではなく、他の言語との相互運用性に実用的に焦点を当てています。たとえば、Cヘッダーファイルを直接インポートしてFFIなしで使用できるようにし、(現在は)ラッパーなしでPythonAPIを使用できるようにします。 。
Swiftには、低レベルのシステムプログラミングから高レベルのスクリプティングまで、習得と使用のしやすさに重点を置いた大胆な目標があります。 Swiftは、習得と使用が簡単で強力である必要があるため、複雑さの段階的開示の原則に依存しています。これは、複雑さの恩恵を受ける人々に複雑さのコストを積極的に織り込みます。高性能と組み合わされた「スクリプト言語の感触」は、機械学習に非常に役立ちます。
Swiftの設計の最後の適切な側面は、Swift言語の多くが実際にその標準ライブラリに実装されていることです。 IntやBoolのような「Builtin」型は、実際には、魔法の型と操作をラップする標準ライブラリで定義された構造体です。そのため、Swiftは単なる「LLVMのシンタックスシュガー」であると冗談を言うことがあります。
Swiftとオンラインで利用できるコンテンツのトンについてはもっとクールなものがたくさんあります。 Swiftプログラミングの一般的な概念について詳しく知りたい場合は、以下のリンクから始めてください。
- Swift Tourは、 Swiftの高レベルの構文と感触のスキマブルツアーであり、より大きな「TheSwiftProgrammingLanguage」の本の一部です。
- 「 Swiftで値型を使用してより良いアプリを構築する」[ YouTube ]で説明されているように、値のセマンティクスは強力であり、Swiftコードで重要な役割を果たします。
- Swiftは従来のOOPをサポートしていますが、Haskell型システムのアイデアを採用しています。これは「 Swiftでのプロトコル指向プログラミング」[ YouTube ]で説明されています。
警告: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統合のおかげで、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!