警告
このリポジトリの開発は https://github.com/janestreet/torch に移行されました。
ocaml-torch は、 PyTorch tensor ライブラリにいくつかの ocaml バインディングを提供します。これにより、GPU アクセラレーションとテープベースの自動微分を備えた OCaml NumPy のようなテンソル計算が実現します。
これらのバインディングは PyTorch C++ API を使用し、ほとんどが自動的に生成されます。現在の GitHub チップと opam パッケージ v0.7 は PyTorch v2.0.0に対応します。
Linux では、cxx11 abi CPU バージョン、cuda 11.7 バージョンを使用する PyTorch バージョンが必要になることに注意してください。
opam パッケージは、次のコマンドを使用してインストールできます。これにより、CPU バージョンの libtorch が自動的にインストールされます。
opam インストールトーチ
その後、いくつかのサンプル コードをコンパイルできます。以下の手順を参照してください。 ocaml-torch は、utop または ocaml-jupyter を介して対話モードで使用することもできます。
これは utop セッションのサンプルです。
最初のトーチ プログラムを構築するには、次の内容を含むファイルexample.ml
を作成します。
トーチレットを開く () = let tensor = Tensor.randn [ 4; 2]で Tensor.print テンソル
次に、次の内容のdune
ファイルを作成します。
(実行可能ファイル (名前の例) (図書館のトーチ))
dune exec example.exe
実行してプログラムをコンパイルし、実行します。
あるいは、最初にdune build example.exe
経由でコードをコンパイルしてから、実行可能ファイル_build/default/example.exe
を実行することもできます (バイトコード ターゲットのexample.bc
のビルドは MacOS では機能しない可能性があることに注意してください)。
MNIST のチュートリアル。
ResNet-18 モデルの微調整。
敵対的生成ネットワーク。
Python モデルを実行しています。
外部リポジトリからのいくつかのより高度なアプリケーション:
Arulselvan Madhavan による mini-dalle の OCaml ポート。
安定拡散 1.5 を実装するディフューザー ライブラリのクローン: Arulselvan Madhavan による diffusers-ocaml。
BERT に基づく自然言語処理モデルは、ocaml-bert リポジトリにあります。
以下は、MNIST データセットでトレーニングされた線形モデルの例です (完全なコード)。
(* モデルの重みを保存するために 2 つのテンソルを作成します。 *) let ws = Tensor.zeros [image_dim; label_count] ~requires_grad:true で let bs = Tensor.zeros [label_count] ~requires_grad:true in モデル xs = テンソル (mm xs ws + bs) とします。 for Index = 1 to 100 do(* クロスエントロピー損失を計算します。 *)let loss = Tensor.cross_entropy_for_logits (model train_images) ~targets:train_labelsinTensor.backward loss;(* 勾配降下法を適用し、これらの勾配追跡を無効にします。 *) Tensor.(no_grad (fun () -> ws -= 卒業生 ws * f 学習率; bs -= grad bs * f learning_rate));(* 検証誤差を計算します。 *)let test_accuracy = Tensor.(argmax ~dim:(-1) (model test_images) = test_labels) |> Tensor.to_kind ~kind:( T Float) |> Tensor.sum |> Tensor.float_value |> fun sum -> sum /。 test_samplesinprintf "%d %f %.2f%%n%!"インデックス (Tensor.float_value 損失) (100. *. test_accuracy); 終わり
CIFAR-10 に関する ResNet の例。
リカレント ニューラル ネットワークを使用した文字レベル言語モデリングを示す char-rnn の簡略版。
ニューラル スタイル転送は、画像のスタイルを別の画像のコンテンツに適用します。これには、深い畳み込みニューラル ネットワークが使用されます。
さまざまな事前トレーニング済みコンピューター ビジョン モデルがビジョン ライブラリに実装されています。重量ファイルは次のリンクからダウンロードできます。
ResNet-18 の重み。
ResNet-34 の重み。
ResNet-50 の重み。
ResNet-101 の重み。
ResNet-152 の重み。
DenseNet-121 の重み。
DenseNet-161 の重み。
DenseNet-169 の重み。
SqueezeNet 1.0 のウェイト。
SqueezeNet 1.1 の重み。
VGG-13ウェイト。
VGG-16ウェイト。
AlexNet の重み。
Inception-v3 の重み。
MobileNet-v2 の重み。
EfficientNet b0 ウェイト、b1 ウェイト、b2 ウェイト、b3 ウェイト、b4 ウェイト。
いくつかのサンプル画像上で事前トレーニングされたモデルを実行するには、次のコマンドを使用して簡単に実行できます。
dune exec 例/pretrained/predict.exe path/to/resnet18.ot Tiger.jpg
ocaml-torch をインストールするこの代替方法は、GPU アクセラレーションを有効にして実行すると便利です。
libtorch ライブラリは、PyTorch Web サイト (2.0.0 CPU バージョン) からダウンロードできます。
libtorch ライブラリをダウンロードして抽出し、すべてのサンプルをビルドするには以下を実行します。
LIBTORCH=/path/to/libtorch をエクスポート git clone https://github.com/LaurentMazare/ocaml-torch.gitcd ocaml-torch 全部作る