คำเตือน
การพัฒนาสำหรับ repo นี้ได้ถูกย้ายไปที่ https://github.com/janestreet/torch
ocaml-torch ให้การเชื่อมโยง ocaml บางอย่างสำหรับไลบรารีเมตริกซ์ PyTorch สิ่งนี้นำมาสู่การคำนวณเทนเซอร์ที่เหมือน OCaml NumPy พร้อมการเร่งความเร็ว GPU และการสร้างความแตกต่างอัตโนมัติตามเทป
การเชื่อมโยงเหล่านี้ใช้ PyTorch C++ API และส่วนใหญ่จะสร้างขึ้นโดยอัตโนมัติ เคล็ดลับ GitHub ปัจจุบันและแพ็คเกจ opam v0.7 สอดคล้องกับ PyTorch v2.0.0
บน Linux โปรดทราบว่าคุณจะต้องใช้เวอร์ชัน PyTorch โดยใช้เวอร์ชัน cxx11 abi cpu, เวอร์ชัน cuda 11.7
สามารถติดตั้งแพ็คเกจ opam ได้โดยใช้คำสั่งต่อไปนี้ สิ่งนี้จะติดตั้ง libtorch เวอร์ชัน CPU โดยอัตโนมัติ
opam ติดตั้งไฟฉาย
จากนั้นคุณสามารถคอมไพล์โค้ดตัวอย่างบางส่วนได้ ดูคำแนะนำด้านล่างนี้ ocaml-torch สามารถใช้ในโหมดโต้ตอบผ่าน utop หรือ ocaml-jupyter
นี่คือตัวอย่างเซสชัน UTOP
หากต้องการสร้างโปรแกรมคบเพลิงแรก ให้สร้างไฟล์ example.ml
โดยมีเนื้อหาดังต่อไปนี้
เปิดคบเพลิง () = ให้เทนเซอร์ = Tensor.randn [ 4; 2 ] ใน เทนเซอร์พิมพ์เทนเซอร์
จากนั้นสร้างไฟล์ dune
โดยมีเนื้อหาดังต่อไปนี้:
(ปฏิบัติการ (ตัวอย่างชื่อ) (จุดคบเพลิงห้องสมุด))
รัน dune exec example.exe
เพื่อคอมไพล์โปรแกรมและรัน!
หรือคุณสามารถคอมไพล์โค้ดผ่าน dune build example.exe
จากนั้นรันไฟล์ปฏิบัติการ _build/default/example.exe
(โปรดทราบว่าการสร้าง bytecode เป้าหมาย example.bc
อาจใช้ไม่ได้บน macos)
กวดวิชา MNIST
การปรับแต่งโมเดล ResNet-18 อย่างละเอียด
เครือข่ายปฏิปักษ์ทั่วไป
ใช้งานโมเดล Python บางรุ่น
แอปพลิเคชันขั้นสูงบางส่วนจาก repos ภายนอก:
ท่าเรือ OCaml ของ mini-dalle โดย Arulselvan Madhavan
โคลนของไลบรารีตัวกระจายที่ใช้การแพร่แบบเสถียร 1.5: ตัวกระจายสัญญาณ-ocaml โดย Arulselvan Madhavan
โมเดลการประมวลผลภาษาธรรมชาติที่ใช้ BERT สามารถพบได้ใน repo ocaml-bert
ด้านล่างนี้เป็นตัวอย่างของโมเดลเชิงเส้นที่ได้รับการฝึกบนชุดข้อมูล MNIST (โค้ดเต็ม)
(* สร้างเทนเซอร์สองตัวเพื่อจัดเก็บตุ้มน้ำหนักรุ่น *) ให้ ws = Tensor.zeros [image_dim; label_count] ~requires_grad:true ใน ให้ bs = Tensor.zeros [label_count] ~requires_grad:true in ให้โมเดล xs = เทนเซอร์ (มม. xs ws + bs) เข้า สำหรับดัชนี = 1 ถึง 100 do (* คำนวณการสูญเสียข้ามเอนโทรปี *) ให้การสูญเสีย = Tensor.cross_entropy_for_logits (model train_images) ~targets:train_labelsinTensor.backward loss;(* ใช้การไล่ระดับสีแบบไล่ระดับ ปิดใช้งานการติดตามการไล่ระดับสีสำหรับสิ่งเหล่านี้ *) เทนเซอร์ (no_grad (สนุก () -> ws -= ผู้สำเร็จการศึกษา ws * f การเรียนรู้ _rate; bs -= grad bs * f Learning_rate));(* คำนวณข้อผิดพลาดในการตรวจสอบ *) ให้ test_accuracy = Tensor.(argmax ~dim:(-1) (model test_images) = test_labels) |> Tensor.to_kind ~kind:( T Float) |> Tensor.sum |> Tensor.float_value |> ผลรวมสนุก -> sum / test_samplesinprintf "%d %f %.2f%%n%!" ดัชนี (การสูญเสีย Tensor.float_value) (100. *. test_accuracy); เสร็จแล้ว
ตัวอย่าง ResNet บางส่วนใน CIFAR-10
char-rnn เวอร์ชันที่เรียบง่ายซึ่งแสดงการสร้างแบบจำลองภาษาระดับอักขระโดยใช้ Recurrent Neural Networks
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
ตุ้มน้ำหนัก VGG-13
ตุ้มน้ำหนัก VGG-16
ตุ้มน้ำหนัก AlexNet
ตุ้มน้ำหนัก Inception-v3
ตุ้มน้ำหนัก MobileNet-v2
น้ำหนัก EfficientNet b0, น้ำหนัก b1, น้ำหนัก b2, น้ำหนัก b3, น้ำหนัก b4
การรันโมเดลที่ได้รับการฝึกล่วงหน้าบนอิมเมจตัวอย่างบางรูปสามารถทำได้ง่ายดายผ่านคำสั่งต่อไปนี้
ตัวอย่าง dune exec/pretrained/predict.exe path/to/resnet18.ot Tiger.jpg
วิธีอื่นในการติดตั้ง ocaml-torch อาจมีประโยชน์ในการทำงานโดยเปิดใช้งานการเร่งความเร็ว GPU
สามารถดาวน์โหลดไลบรารี libtorch ได้จากเว็บไซต์ PyTorch (เวอร์ชัน cpu 2.0.0)
ดาวน์โหลดและแยกไลบรารี libtorch จากนั้นเพื่อสร้างตัวอย่างทั้งหมดให้รัน:
ส่งออก LIBTORCH=/path/to/libtorch โคลนคอมไพล์ https://github.com/LaurentMazare/ocaml-torch.gitcd ocaml-torch ทำให้ทั้งหมด