Avertissement
Le développement de ce dépôt a été déplacé vers https://github.com/janestreet/torch .
ocaml-torch fournit des liaisons ocaml pour la bibliothèque de tenseurs PyTorch. Cela amène aux calculs de tenseurs de type OCaml NumPy avec accélération GPU et différenciation automatique sur bande.
Ces liaisons utilisent l'API PyTorch C++ et sont pour la plupart générées automatiquement. L'astuce GitHub actuelle et le package opam v0.7 correspondent à PyTorch v2.0.0 .
Sous Linux, notez que vous aurez besoin de la version PyTorch utilisant la version cxx11 abi cpu, version cuda 11.7.
Le package opam peut être installé à l'aide de la commande suivante. Cela installe automatiquement la version CPU de libtorch.
opam installer la torche
Vous pouvez ensuite compiler un exemple de code, voir quelques instructions ci-dessous. ocaml-torch peut également être utilisé en mode interactif via utop ou ocaml-jupyter.
Voici un exemple de session utop.
Pour construire un premier programme torch, créez un fichier example.ml
avec le contenu suivant.
ouvrir Torchlet () = soit tenseur = Tensor.randn [ 4; 2 ] dans Tenseur Tensor.print
Créez ensuite un fichier dune
avec le contenu suivant :
(exécutables (exemple de noms) (torche des bibliothèques))
Exécutez dune exec example.exe
pour compiler le programme et exécutez-le !
Alternativement, vous pouvez d'abord compiler le code via dune build example.exe
, puis exécuter l'exécutable _build/default/example.exe
(notez que la construction de la cible de bytecode example.bc
peut ne pas fonctionner sur Macos).
Tutoriel MNIST.
Mise au point d'un modèle ResNet-18.
Réseaux adverses génératifs.
Exécuter un modèle Python.
Quelques applications plus avancées provenant de dépôts externes :
Un portage OCaml de mini-dalle par Arulselvan Madhavan.
Un clone de la bibliothèque diffusers implémentant stable-diffusion 1.5 : diffusers-ocaml par Arulselvan Madhavan.
Les modèles de traitement du langage naturel basés sur BERT peuvent être trouvés dans le dépôt ocaml-bert.
Vous trouverez ci-dessous un exemple de modèle linéaire entraîné sur l'ensemble de données MNIST (code complet).
(* Créez deux tenseurs pour stocker les poids du modèle. *) soit ws = Tensor.zeros [image_dim; label_count] ~requires_grad:true dans laissez bs = Tensor.zeros [label_count] ~requires_grad:true dans soit le modèle xs = Tenseur. (mm xs ws + bs) dans for index = 1 à 100 do(* Calculez la perte d'entropie croisée. *)let loss = Tensor.cross_entropy_for_logits (model train_images) ~targets:train_labelsinTensor.backward loss;(* Appliquez la descente de gradient, désactivez le suivi de gradient pour ceux-ci. *) Tenseur.(no_grad (fun() -> ws -= diplômé ws * f learning_rate; bs -= grad bs * f learning_rate));(* Calculer l'erreur de validation. *)let test_accuracy = Tensor.(argmax ~dim:(-1) (model test_images) = test_labels) |> Tensor.to_kind ~kind:( T Float) |> Tensor.sum |> Tensor.float_value |> somme amusante -> somme /. test_samplesinprintf "%d %f %.2f%%n%!" index (perte Tensor.float_value) (100. *. test_accuracy); fait
Quelques exemples ResNet sur CIFAR-10.
Une version simplifiée de char-rnn illustrant la modélisation du langage au niveau des caractères à l'aide de réseaux de neurones récurrents.
Neural Style Transfer applique le style d’une image au contenu d’une autre image. Cela utilise un réseau neuronal convolutif profond.
Divers modèles de vision par ordinateur pré-entraînés sont implémentés dans la bibliothèque de vision. Les fichiers de poids peuvent être téléchargés aux liens suivants :
Poids ResNet-18.
Poids ResNet-34.
Poids ResNet-50.
Poids ResNet-101.
Poids ResNet-152.
Poids DenseNet-121.
Poids DenseNet-161.
Poids DenseNet-169.
Poids SqueezeNet 1.0.
Poids SqueezeNet 1.1.
Poids VGG-13.
Poids VGG-16.
Poids AlexNet.
Pondérations Inception-v3.
Pondérations MobileNet-v2.
EfficientNet poids b0, poids b1, poids b2, poids b3, poids b4.
L'exécution des modèles pré-entraînés sur certains exemples d'images peut être facilement effectuée via les commandes suivantes.
exemples dune exec/pretrained/predict.exe chemin/vers/resnet18.ot tigre.jpg
Cette manière alternative d'installer ocaml-torch pourrait être utile pour fonctionner avec l'accélération GPU activée.
La bibliothèque libtorch peut être téléchargée depuis le site Web de PyTorch (version CPU 2.0.0).
Téléchargez et extrayez la bibliothèque libtorch puis pour construire tous les exemples, exécutez :
exporter LIBTORCH=/chemin/vers/libtorch clone git https://github.com/LaurentMazare/ocaml-torch.gitcd ocaml-torch faire tout