Advertencia
El desarrollo de este repositorio se trasladó a https://github.com/janestreet/torch.
ocaml-torch proporciona algunos enlaces de ocaml para la biblioteca de tensores de PyTorch. Esto lleva a OCaml cálculos tensoriales similares a NumPy con aceleración de GPU y diferenciación automática basada en cinta.
Estos enlaces utilizan la API de PyTorch C++ y en su mayoría se generan automáticamente. El consejo actual de GitHub y el paquete opam v0.7 corresponden a PyTorch v2.0.0 .
En Linux, tenga en cuenta que necesitará la versión de PyTorch usando la versión cxx11 abi cpu, versión cuda 11.7.
El paquete opam se puede instalar usando el siguiente comando. Esto instala automáticamente la versión de CPU de libtorch.
antorcha de instalación opam
Luego puede compilar un código de muestra; consulte algunas instrucciones a continuación. ocaml-torch también se puede utilizar en modo interactivo mediante utop u ocaml-jupyter.
Aquí hay una sesión de muestra de utop.
Para crear un primer programa antorcha, cree un archivo example.ml
con el siguiente contenido.
abrir antorcha () = let tensor = Tensor.randn [ 4; 2 ] en tensor.imprimir tensor
Luego cree un archivo dune
con el siguiente contenido:
(ejecutables (ejemplo de nombres) (antorcha de bibliotecas))
Ejecute dune exec example.exe
para compilar el programa y ejecutarlo.
Alternativamente, primero puede compilar el código a través de dune build example.exe
y luego ejecutar el ejecutable _build/default/example.exe
(tenga en cuenta que la compilación del código de bytes de destino example.bc
puede no funcionar en macos).
Tutorial MNIST.
Ajuste de un modelo ResNet-18.
Redes generativas adversarias.
Ejecutando algún modelo de Python.
Algunas aplicaciones más avanzadas de repositorios externos:
Un puerto OCaml de mini-dalle de Arulselvan Madhavan.
Un clon de la biblioteca de difusores que implementa la difusión estable 1.5: difusores-ocaml de Arulselvan Madhavan.
Los modelos de procesamiento del lenguaje natural basados en BERT se pueden encontrar en el repositorio ocaml-bert.
A continuación se muestra un ejemplo de un modelo lineal entrenado en el conjunto de datos MNIST (código completo).
(* Cree dos tensores para almacenar los pesos del modelo. *) let ws = Tensor.zeros [image_dim; label_count] ~requires_grad:true en let bs = Tensor.zeros [label_count] ~requires_grad:true en sea el modelo xs = Tensor.(mm xs ws + bs) en for index = 1 to 100 do(* Calcular la pérdida de entropía cruzada. *)let loss = Tensor.cross_entropy_for_logits (modelo train_images) ~targets:train_labelsinTensor.backward loss;(* Aplicar descenso de gradiente, deshabilitar el seguimiento de gradiente para estos. *) Tensor.(no_grad (divertido () -> ws -= grad ws * f tasa_aprendizaje; bs -= grad bs * f learning_rate));(* Calcula el error de validación. *)let test_accuracy = Tensor.(argmax ~dim:(-1) (model test_images) = test_labels) |> Tensor.to_kind ~kind:( T Float) |> Tensor.sum |> Tensor.float_value |> suma divertida -> suma /. test_samplesinprintf "%d %f %.2f%%n%!" índice (pérdida de Tensor.float_value) (100. *. test_accuracy); hecho
Algunos ejemplos de ResNet en CIFAR-10.
Una versión simplificada de char-rnn que ilustra el modelado del lenguaje a nivel de caracteres utilizando redes neuronales recurrentes.
Neural Style Transfer aplica el estilo de una imagen al contenido de otra imagen. Esto utiliza una red neuronal convolucional profunda.
En la biblioteca de visión se implementan varios modelos de visión por computadora previamente entrenados. Los archivos de peso se pueden descargar en los siguientes enlaces:
Pesos ResNet-18.
Pesos ResNet-34.
Pesas ResNet-50.
Pesos ResNet-101.
Pesos ResNet-152.
Pesas DenseNet-121.
Pesas DenseNet-161.
Pesos DenseNet-169.
Pesas SqueezeNet 1.0.
Pesas SqueezeNet 1.1.
Pesas VGG-13.
Pesas VGG-16.
Pesos AlexNet.
Pesos de Inception-v3.
Pesos de MobileNet-v2.
EfficientNet ponderaciones b0, ponderaciones b1, ponderaciones b2, ponderaciones b3, ponderaciones b4.
La ejecución de los modelos previamente entrenados en algunas imágenes de muestra se puede realizar fácilmente mediante los siguientes comandos.
ejemplos de dune exec/pretrained/predict.exe ruta/to/resnet18.ot tigre.jpg
Esta forma alternativa de instalar ocaml-torch podría resultar útil para ejecutarla con la aceleración de GPU habilitada.
La biblioteca libtorch se puede descargar desde el sitio web de PyTorch (versión de CPU 2.0.0).
Descargue y extraiga la biblioteca libtorch y luego, para compilar todos los ejemplos, ejecute:
exportar LIBTORCH=/ruta/a/libtorch clon de git https://github.com/LaurentMazare/ocaml-torch.gitcd ocaml-torch hacer todo