Warnung
Die Entwicklung für dieses Repo wurde nach https://github.com/janestreet/torch verschoben.
ocaml-torch stellt einige ocaml-Bindungen für die PyTorch-Tensorbibliothek bereit. Dies führt zu OCaml NumPy-ähnlichen Tensorberechnungen mit GPU-Beschleunigung und bandbasierter automatischer Differenzierung.
Diese Bindungen nutzen die PyTorch C++ API und werden meist automatisch generiert. Der aktuelle GitHub-Tipp und das Opam-Paket v0.7 entsprechen PyTorch v2.0.0 .
Beachten Sie unter Linux, dass Sie die PyTorch-Version mit der CPU-Version cxx11 abi und der Version cuda 11.7 benötigen.
Das opam-Paket kann mit dem folgenden Befehl installiert werden. Dadurch wird automatisch die CPU-Version von libtorch installiert.
Opam-Taschenlampe installieren
Anschließend können Sie Beispielcode kompilieren. Nachfolgend finden Sie einige Anweisungen. ocaml-torch kann auch im interaktiven Modus über utop oder ocaml-jupyter verwendet werden.
Hier ist eine Beispiel-utop-Sitzung.
Um ein erstes Torch-Programm zu erstellen, erstellen Sie eine Datei example.ml
mit folgendem Inhalt.
öffne Torchlet () = let tensor = Tensor.randn [ 4; 2 ] in Tensor.Drucktensor
Erstellen Sie dann eine dune
-Datei mit folgendem Inhalt:
(ausführbare Dateien (Namensbeispiel) (Bibliotheken Fackel))
Führen Sie dune exec example.exe
aus, um das Programm zu kompilieren und auszuführen!
Alternativ können Sie den Code zunächst über dune build example.exe
kompilieren und dann die ausführbare Datei _build/default/example.exe
ausführen (beachten Sie, dass das Erstellen des Bytecode-Ziels example.bc
auf MacOS möglicherweise nicht funktioniert).
MNIST-Tutorial.
Feinabstimmung eines ResNet-18-Modells.
Generative gegnerische Netzwerke.
Ausführen eines Python-Modells.
Einige fortgeschrittenere Anwendungen von externen Repos:
Eine OCaml-Portierung von Mini-Dalle von Arulselvan Madhavan.
Ein Klon der Diffusers-Bibliothek, die Stable-Diffusion 1.5 implementiert: Diffusers-Ocaml von Arulselvan Madhavan.
Auf BERT basierende Modelle zur Verarbeitung natürlicher Sprache finden Sie im ocaml-bert-Repo.
Unten finden Sie ein Beispiel für ein lineares Modell, das auf dem MNIST-Datensatz trainiert wurde (vollständiger Code).
(* Erstellen Sie zwei Tensoren zum Speichern von Modellgewichten. *) let ws = Tensor.zeros [image_dim; label_count] ~requires_grad:true in let bs = Tensor.zeros [label_count] ~requires_grad:true in sei Modell xs = Tensor.(mm xs ws + bs) in for index = 1 bis 100 do(* Berechne den Kreuzentropieverlust. *)let loss = Tensor.cross_entropy_for_logits (model train_images) ~targets:train_labelsinTensor.backward loss;(* Gradientenabstieg anwenden, Gradientenverfolgung für diese deaktivieren. *) Tensor.(no_grad (fun () -> ws -= grad ws * f learning_rate; bs -= grad bs * f learning_rate));(* Berechne den Validierungsfehler. *)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%!" index (Tensor.float_value loss) (100. *. test_accuracy); Erledigt
Einige ResNet-Beispiele zu CIFAR-10.
Eine vereinfachte Version von char-rnn, die die Sprachmodellierung auf Zeichenebene mithilfe wiederkehrender neuronaler Netze veranschaulicht.
Neural Style Transfer wendet den Stil eines Bildes auf den Inhalt eines anderen Bildes an. Dabei wird ein tiefes Faltungs-Neuronales Netzwerk verwendet.
In der Vision-Bibliothek sind verschiedene vorab trainierte Computer-Vision-Modelle implementiert. Die Gewichtsdateien können unter folgenden Links heruntergeladen werden:
ResNet-18-Gewichte.
ResNet-34-Gewichte.
ResNet-50-Gewichte.
ResNet-101-Gewichte.
ResNet-152-Gewichte.
DenseNet-121-Gewichte.
DenseNet-161-Gewichte.
DenseNet-169-Gewichte.
SqueezeNet 1.0-Gewichte.
SqueezeNet 1.1 Gewichte.
VGG-13-Gewichte.
VGG-16-Gewichte.
AlexNet-Gewichte.
Inception-v3-Gewichte.
MobileNet-v2-Gewichte.
EfficientNet b0-Gewichte, b1-Gewichte, b2-Gewichte, b3-Gewichte, b4-Gewichte.
Das Ausführen der vorab trainierten Modelle auf einigen Beispielbildern kann einfach über die folgenden Befehle erfolgen.
dune exec examples/pretrained/predict.exe path/to/resnet18.ot tiger.jpg
Diese alternative Methode zur Installation von ocaml-torch könnte für die Ausführung mit aktivierter GPU-Beschleunigung nützlich sein.
Die libtorch-Bibliothek kann von der PyTorch-Website heruntergeladen werden (CPU-Version 2.0.0).
Laden Sie die libtorch-Bibliothek herunter, extrahieren Sie sie und führen Sie dann Folgendes aus, um alle Beispiele zu erstellen:
export LIBTORCH=/path/to/libtorch Git-Klon https://github.com/LaurentMazare/ocaml-torch.gitcd ocaml-torch alles machen