تحذير
انتقل تطوير هذا الريبو إلى https://github.com/janestreet/torch.
يوفر ocaml-torch بعض روابط ocaml لمكتبة الموتر PyTorch. يؤدي ذلك إلى إجراء حسابات موتر تشبه OCaml NumPy مع تسريع وحدة معالجة الرسومات والتمايز التلقائي القائم على الشريط.
تستخدم هذه الروابط واجهة برمجة تطبيقات 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.
هنا عينة من جلسة utop.
لإنشاء برنامج الشعلة الأول، قم بإنشاء ملف example.ml
بالمحتوى التالي.
فتح الشعلة () = دع الموتر = Tensor.randn [4؛ 2] في Tensor.print الموتر
ثم قم بإنشاء ملف dune
بالمحتوى التالي:
(الملفات التنفيذية (مثال الأسماء) (شعلة المكتبات))
قم بتشغيل dune exec example.exe
لتجميع البرنامج وتشغيله!
بدلاً من ذلك، يمكنك أولاً تجميع التعليمات البرمجية عبر dune build example.exe
ثم تشغيل الملف القابل للتنفيذ _build/default/example.exe
(لاحظ أن إنشاء هدف الرمز الثانوي example.bc
قد لا يعمل على أنظمة macos).
البرنامج التعليمي MNIST.
الضبط الدقيق لنموذج ResNet-18.
شبكات الخصومة التوليدية.
تشغيل بعض نماذج بايثون.
بعض التطبيقات الأكثر تقدمًا من عمليات إعادة الشراء الخارجية:
ميناء OCaml لـ mini-dalle بواسطة Arulselvan Madhavan.
استنساخ لمكتبة الناشرين التي تنفذ النشر المستقر 1.5: الناشرون-أوكامل بواسطة Arulselvan Madhavan.
يمكن العثور على نماذج معالجة اللغات الطبيعية المبنية على BERT في ocaml-bert repo.
فيما يلي مثال لنموذج خطي تم تدريبه على مجموعة بيانات MNIST (الكود الكامل).
(* قم بإنشاء موترين لتخزين أوزان النموذج. *) Let ws = Tensor.zeros [image_dim; label_count] ~requires_grad:true in دع bs = Tensor.zeros [label_count] ~requires_grad:true in دع النموذج xs = Tensor.(mm xs ws + bs) in للمؤشر = 1 إلى 100 do(* حساب الخسارة عبر الإنتروبيا. *)let Loss = Tensor.cross_entropy_for_logits (نموذج Train_images) ~targets:train_labelsinTensor.backward Loss;(* تطبيق نزول التدرج، وتعطيل تتبع التدرج لهذه. *) Tensor.(no_grad (fun () -> 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 |> مجموع ممتع -> مجموع /. 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.
أوزان سكويز نت 1.0
أوزان سكويز نت 1.1
أوزان VGG-13.
أوزان VGG-16.
أوزان اليكس نت.
أوزان التأسيس-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 (إصدار 2.0.0 لوحدة المعالجة المركزية).
قم بتنزيل واستخراج مكتبة libtorch ثم قم بتشغيل كافة الأمثلة لبناء الأمثلة:
تصدير LIBTORCH=/path/to/libtorch استنساخ البوابة https://github.com/LaurentMazare/ocaml-torch.gitcd ocaml-torch جعل كل شيء