Предупреждение
Разработка этого репозитория перенесена на https://github.com/janestreet/torch.
ocaml-torch предоставляет некоторые привязки ocaml для тензорной библиотеки PyTorch. Это приводит к тензорным вычислениям, подобным OCaml NumPy, с ускорением графического процессора и автоматическим дифференцированием на основе ленты.
Эти привязки используют API PyTorch C++ и в основном генерируются автоматически. Текущий совет GitHub и пакет opam v0.7 соответствуют PyTorch v2.0.0 .
В Linux обратите внимание, что вам понадобится версия PyTorch, использующая версию cxx11 abi cpu, версию cuda 11.7.
Пакет opam можно установить с помощью следующей команды. Это автоматически установит версию libtorch для ЦП.
опам установить горелку
Затем вы можете скомпилировать пример кода, см. инструкции ниже. ocaml-torch также можно использовать в интерактивном режиме через utop или ocaml-jupyter.
Вот пример утоп-сессии.
Чтобы создать первую программу Torch, создайте файл example.ml
со следующим содержимым.
открыть Факел () = пусть тензор = Tensor.randn [4; 2 ] в Тензор Tensor.print
Затем создайте файл dune
со следующим содержимым:
(исполняемые файлы (пример имен) (библиотека с факелом))
Запустите dune exec example.exe
чтобы скомпилировать программу и запустить ее!
В качестве альтернативы вы можете сначала скомпилировать код с помощью dune build example.exe
а затем запустить исполняемый файл _build/default/example.exe
(обратите внимание, что создание целевого байт-кода example.bc
может не работать на MacOS).
Учебник МНИСТ.
Точная настройка модели ResNet-18.
Генеративно-состязательные сети.
Запуск некоторой модели Python.
Еще несколько продвинутых приложений из внешних репозиториев:
Порт мини-далле на OCaml от Арулсельвана Мадхавана.
Клон библиотеки диффузоров, реализующий стабильную диффузию 1.5: диффузоры-ocaml от Арулсельвана Мадхавана.
Модели обработки естественного языка, основанные на BERT, можно найти в репозитории ocaml-bert.
Ниже приведен пример линейной модели, обученной на наборе данных MNIST (полный код).
(* Создайте два тензора для хранения весов модели. *) пусть ws = Tensor.zeros [image_dim; label_count] ~requires_grad:true в let bs = Tensor.zeros [label_count] ~requires_grad:true в пусть модель xs = Tensor.(mm xs ws + bs) в for index = от 1 до 100 do(* Вычислите потерю перекрестной энтропии. *)let loss = Tensor.cross_entropy_for_logits (model train_images) ~targets:train_labelsinTensor.backward loss;(* Примените градиентный спуск, отключите для них отслеживание градиента. *) Тензор.(no_grad (весело () -> ws -= grad ws * f Learning_rate; bs -= grad bs * f Learning_rate));(* Вычисляем ошибку проверки. *)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%!" индекс (потеря Tensor.float_value) (100. *. test_accuracy); сделанный
Некоторые примеры ResNet на CIFAR-10.
Упрощенная версия char-rnn, иллюстрирующая моделирование языка на уровне символов с использованием рекуррентных нейронных сетей.
Neural Style Transfer применяет стиль изображения к содержимому другого изображения. При этом используется глубокая сверточная нейронная сеть.
В библиотеке машинного зрения реализованы различные предварительно обученные модели компьютерного зрения. Файлы весов можно скачать по следующим ссылкам:
Веса ResNet-18.
Веса ResNet-34.
Веса ResNet-50.
Веса ResNet-101.
Веса ResNet-152.
Гири DenseNet-121.
Весы DenseNet-161.
Весы DenseNet-169.
Веса SqueezeNet 1.0.
Веса SqueezeNet 1.1.
Гири ВГГ-13.
Гири ВГГ-16.
AlexNet весит.
Веса Inception-v3.
Веса MobileNet-v2.
EfficientNet Веса b0, веса b1, веса b2, веса b3, веса b4.
Запуск предварительно обученных моделей на некоторых примерах изображений можно легко выполнить с помощью следующих команд.
примеры dune exec/pretrained/predict.exe путь/to/resnet18.ot Tiger.jpg
Этот альтернативный способ установки ocaml-torch может быть полезен при включенном ускорении графического процессора.
Библиотеку libtorch можно загрузить с веб-сайта PyTorch (версия процессора 2.0.0).
Загрузите и извлеките библиотеку libtorch, а затем запустите все примеры:
экспортировать LIBTORCH=/путь/в/libtorch git clone https://github.com/LaurentMazare/ocaml-torch.gitcd ocaml-torch сделать все