package torch
Install
Dune Dependency
Authors
Maintainers
Sources
md5=112bc4eef842883abdf25e150dc7952b
sha512=1670f337e5a00aa6acda9182b71c586cd817ed565ab1df280bba30f610760affb0d1fc859abe5f33bf78323cf3bf2391ad0b3d955aedff3894aae70723997705
Description
The ocamltorch project provides some OCaml bindings for the PyTorch library. This brings to OCaml NumPylike tensor computations with GPU acceleration and tapebased automatic differentiation.
Published: 22 Jun 2019
README
ocamltorch
ocamltorch provides some ocaml bindings for the PyTorch tensor library. This brings to OCaml NumPylike tensor computations with GPU acceleration and tapebased automatic differentiation.
These bindings use the PyTorch C++ API and are mostly automatically generated. The current GitHub tip corresponds to PyTorch v1.1.0.
Opam Installation
The opam package can be installed using the following command. This automatically installs the CPU version of libtorch.
opam install torch
You can then compile some sample code, see some instructions below. ocamltorch can also be used in interactive mode via utop or ocamljupyter.
Here is a sample utop session.
Build a Simple Example
To build a first torch program, create a file example.ml
with the following content.
open Torch
let () =
let tensor = Tensor.randn [ 4; 2 ] in
Tensor.print tensor
Then create a dune
file with the following content:
(executables
(names example)
(libraries torch))
Run dune exec example.exe
to compile the program and run it!
Alternatively you can first compile the code via dune build example.exe
then run the executable _build/default/example.exe
(note that building the bytecode target example.bc
may not work on macos).
Tutorials
Examples
Below is an example of a linear model trained on the MNIST dataset (full code).
(* Create two tensors to store model weights. *)
let ws = Tensor.zeros [image_dim; label_count] ~requires_grad:true in
let bs = Tensor.zeros [label_count] ~requires_grad:true in
let model xs = Tensor.(mm xs ws + bs) in
for index = 1 to 100 do
(* Compute the crossentropy loss. *)
let loss =
Tensor.cross_entropy_for_logits (model train_images) ~targets:train_labels
in
Tensor.backward loss;
(* Apply gradient descent, disable gradient tracking for these. *)
Tensor.(no_grad (fun () >
ws = grad ws * f learning_rate;
bs = grad bs * f learning_rate));
(* Compute the validation error. *)
let test_accuracy =
Tensor.(sum (argmax (model test_images) = test_labels) > float_value)
> fun sum > sum /. test_samples
in
printf "%d %f %.2f%%\n%!" index (Tensor.float_value loss) (100. *. test_accuracy);
end
A simplified version of charrnn illustrating character level language modeling using Recurrent Neural Networks.
Neural Style Transfer applies the style of an image to the content of another image. This uses some deep Convolutional Neural Network.
Models and Weights
Various pretrained computer vision models are implemented in the vision library. The weight files can be downloaded at the following links:
ResNet18 weights.
ResNet34 weights.
ResNet50 weights.
ResNet101 weights.
ResNet152 weights.
DenseNet121 weights.
DenseNet161 weights.
DenseNet169 weights.
SqueezeNet 1.0 weights.
SqueezeNet 1.1 weights.
VGG13 weights.
VGG16 weights.
AlexNet weights.
Inceptionv3 weights.
MobileNetv2 weights.
Running the pretrained models on some sample images can the easily be done via the following commands.
dune exec examples/pretrained/predict.exe path/to/resnet18.ot tiger.jpg
Alternative Installation Options
These alternative ways to install ocamltorch could be useful to run with GPU acceleration enabled.
Option 1: Using PyTorch prebuilt Binaries
The libtorch library can be downloaded from the PyTorch website (1.1.0 cpu version).
Download and extract the libtorch library then to build all the examples run:
export LIBTORCH=/path/to/libtorch
git clone https://github.com/LaurentMazare/ocamltorch.git
cd ocamltorch
make all
Option 2: Using PyTorch Conda package
Conda packages for PyTorch 1.1 can be used via the following command.
conda create n torch
source activate torch
conda install pytorchcpu=1.1.0 c pytorch
# Or for the CUDA version
# conda install pytorch=1.1.0 c pytorch
git clone https://github.com/LaurentMazare/ocamltorch.git
cd ocamltorch
make all
Dependencies (16)
 stdio
 stb_image
 sexplib
 ppx_sexp_conv
 ppx_expect
 ppx_custom_printf
 ocamlcompilerlibs

ocaml
>= "4.06" & < "5.0"
 npy

libtorch
= "1.1.0"
 duneconfigurator

dune
>= "1.3.0"
 ctypesforeign

ctypes
>= "0.11"
 cmdliner

base
>= "v0.11.0"
Dev Dependencies
None
Used by
None
Conflicts
None