Aviso
O desenvolvimento deste repositório foi movido para https://github.com/janestreet/torch .
ocaml-torch fornece algumas ligações ocaml para a biblioteca de tensores PyTorch. Isso traz para OCaml cálculos de tensores semelhantes a NumPy com aceleração de GPU e diferenciação automática baseada em fita.
Essas ligações usam a API PyTorch C++ e são geradas principalmente automaticamente. A dica atual do GitHub e o pacote opam v0.7 correspondem ao PyTorch v2.0.0 .
No Linux, observe que você precisará da versão PyTorch usando a versão cxx11 abi cpu, versão cuda 11.7.
O pacote opam pode ser instalado usando o seguinte comando. Isso instala automaticamente a versão CPU do libtorch.
Opam instalar tocha
Você pode então compilar algum código de exemplo, veja algumas instruções abaixo. ocaml-torch também pode ser usado no modo interativo via utop ou ocaml-jupyter.
Aqui está um exemplo de sessão utop.
Para construir um primeiro programa de tocha, crie um arquivo example.ml
com o seguinte conteúdo.
tocha aberta () = deixe tensor = Tensor.randn [4; 2] em Tensor.print tensor
Em seguida, crie um arquivo dune
com o seguinte conteúdo:
(executáveis (exemplo de nomes) (tocha da biblioteca))
Execute dune exec example.exe
para compilar o programa e executá-lo!
Alternativamente, você pode primeiro compilar o código via dune build example.exe
e depois executar o executável _build/default/example.exe
(observe que construir o destino de bytecode example.bc
pode não funcionar em macos).
Tutorial do MNIST.
Ajustando um modelo ResNet-18.
Redes Adversariais Gerativas.
Executando algum modelo Python.
Alguns aplicativos mais avançados de repositórios externos:
Uma porta OCaml de mini-dalle por Arulselvan Madhavan.
Um clone da biblioteca de difusores implementando difusão estável 1.5: difusores-ocaml de Arulselvan Madhavan.
Modelos de processamento de linguagem natural baseados em BERT podem ser encontrados no repositório ocaml-bert.
Abaixo está um exemplo de modelo linear treinado no conjunto de dados MNIST (código completo).
(* Crie dois tensores para armazenar os pesos do modelo. *) deixe ws = Tensor.zeros [image_dim; label_count] ~requires_grad:true em deixe bs = Tensor.zeros [label_count] ~requires_grad:true em deixe o modelo xs = Tensor. (mm xs ws + bs) em para índice = 1 a 100 do(* Calcular a perda de entropia cruzada. *)let loss = Tensor.cross_entropy_for_logits (model train_images) ~targets:train_labelsinTensor.backward loss;(* Aplicar descida de gradiente, desabilitar rastreamento de gradiente para estes. *) Tensor.(no_grad (fun () -> ws -= graduação ws * f taxa_de_aprendizagem; bs -= grad bs * f learning_rate));(* Calcule o erro de validação. *)let test_accuracy = Tensor.(argmax ~dim:(-1) (model test_images) = test_labels) |> Tensor.to_kind ~kind:( T Float) |> Tensor.sum |> Tensor.float_value |> soma divertida -> soma /. test_samplesinprintf "%d %f %.2f%%n%!" índice (perda Tensor.float_value) (100. *. test_accuracy); feito
Alguns exemplos de ResNet no CIFAR-10.
Uma versão simplificada de char-rnn ilustrando a modelagem de linguagem em nível de caractere usando redes neurais recorrentes.
A Transferência de Estilo Neural aplica o estilo de uma imagem ao conteúdo de outra imagem. Isso usa alguma rede neural convolucional profunda.
Vários modelos de visão computacional pré-treinados são implementados na biblioteca de visão. Os arquivos de peso podem ser baixados nos seguintes links:
Pesos ResNet-18.
Pesos ResNet-34.
Pesos ResNet-50.
Pesos ResNet-101.
Pesos ResNet-152.
Pesos DenseNet-121.
Pesos DenseNet-161.
Pesos DenseNet-169.
Pesos SqueezeNet 1.0.
Pesos SqueezeNet 1.1.
Pesos VGG-13.
Pesos VGG-16.
Pesos AlexNet.
Pesos do Inception-v3.
Pesos MobileNet-v2.
Pesos EfficientNet b0, pesos b1, pesos b2, pesos b3, pesos b4.
A execução dos modelos pré-treinados em algumas imagens de amostra pode ser feita facilmente por meio dos comandos a seguir.
dune exec exemplos/pretrained/predict.exe caminho/para/resnet18.ot tigre.jpg
Esta forma alternativa de instalar o ocaml-torch pode ser útil para rodar com a aceleração de GPU habilitada.
A biblioteca libtorch pode ser baixada do site PyTorch (versão 2.0.0 cpu).
Baixe e extraia a biblioteca libtorch e, para construir todos os exemplos, execute:
exportar LIBTORCH=/caminho/para/libtorch clone git https://github.com/LaurentMazare/ocaml-torch.gitcd ocaml-torch faça tudo