import Pkg
Pkg . add ( " Lux " )
نصيحة
إذا كنت تستخدم إصدارًا ما قبل الإصدار 1 من Lux.jl، فيرجى مراجعة قسم التحديث إلى الإصدار 1 للحصول على إرشادات حول كيفية التحديث.
الحزم | نسخة مستقرة | التنزيلات الشهرية | إجمالي التنزيلات | حالة البناء |
---|---|---|---|---|
؟ لوكس.jl | ||||
└ ؟ LuxLib.jl | ||||
└ ؟ LuxCore.jl | ||||
└ ؟ MLDataDevices.jl | ||||
└ ؟ WeightInitializers.jl | ||||
└ ؟ LuxTestUtils.jl | ||||
└ ؟ LuxCUDA.jl |
using Lux, Random, Optimisers, Zygote
# using LuxCUDA, AMDGPU, Metal, oneAPI # Optional packages for GPU support
# Seeding
rng = Random . default_rng ()
Random . seed! (rng, 0 )
# Construct the layer
model = Chain ( Dense ( 128 , 256 , tanh), Chain ( Dense ( 256 , 1 , tanh), Dense ( 1 , 10 )))
# Get the device determined by Lux
dev = gpu_device ()
# Parameter and State Variables
ps, st = Lux . setup (rng, model) |> dev
# Dummy Input
x = rand (rng, Float32, 128 , 2 ) |> dev
# Run the model
y, st = Lux . apply (model, x, ps, st)
# Gradients
# # First construct a TrainState
train_state = Lux . Training . TrainState (model, ps, st, Adam ( 0.0001f0 ))
# # We can compute the gradients using Training.compute_gradients
gs, loss, stats, train_state = Lux . Training . compute_gradients ( AutoZygote (), MSELoss (),
(x, dev ( rand (rng, Float32, 10 , 2 ))), train_state)
# # Optimization
train_state = Training . apply_gradients! (train_state, gs) # or Training.apply_gradients (no `!` at the end)
# Both these steps can be combined into a single call
gs, loss, stats, train_state = Training . single_train_step! ( AutoZygote (), MSELoss (),
(x, dev ( rand (rng, Float32, 10 , 2 ))), train_state)
ابحث في دليل الأمثلة عن أمثلة الاستخدام القائمة بذاتها. تحتوي الوثائق على أمثلة مصنفة في فئات مناسبة.
بالنسبة للأسئلة المتعلقة بالاستخدام، يرجى استخدام مناقشات Github التي تسمح بفهرسة الأسئلة والأجوبة. للإبلاغ عن الأخطاء، استخدم مشكلات github أو من الأفضل إرسال طلب سحب.
إذا وجدت هذه المكتبة مفيدة للعمل الأكاديمي، فيرجى ذكر ما يلي:
@software { pal2023lux ,
author = { Pal, Avik } ,
title = { {Lux: Explicit Parameterization of Deep Neural Networks in Julia} } ,
month = apr,
year = 2023 ,
note = { If you use this software, please cite it as below. } ,
publisher = { Zenodo } ,
version = { v0.5.0 } ,
doi = { 10.5281/zenodo.7808904 } ,
url = { https://doi.org/10.5281/zenodo.7808904 }
}
@thesis { pal2023efficient ,
title = { {On Efficient Training & Inference of Neural Differential Equations} } ,
author = { Pal, Avik } ,
year = { 2023 } ,
school = { Massachusetts Institute of Technology }
}
فكر أيضًا في بطولة جيثب ريبو الخاص بنا.
هذا القسم غير مكتمل إلى حد ما. هل يمكنك المساهمة من خلال المساهمة في إنهاء هذا القسم؟.
يستغرق الاختبار الكامل لـ Lux.jl
وقتًا طويلاً، وإليك كيفية اختبار جزء من الكود.
لكل @testitem
، هناك tags
مقابلة، على سبيل المثال:
@testitem " SkipConnection " setup = [SharedTestSetup] tags = [ :core_layers ]
على سبيل المثال، لنفكر في اختبارات SkipConnection
:
@testitem " SkipConnection " setup = [SharedTestSetup] tags = [ :core_layers ] begin
...
end
يمكننا اختبار المجموعة التي ينتمي إليها SkipConnection
عن طريق اختبار core_layers
. للقيام بذلك، قم بتعيين متغير البيئة LUX_TEST_GROUP
، أو قم بإعادة تسمية العلامة لتضييق نطاق الاختبار بشكل أكبر:
export LUX_TEST_GROUP= " core_layers "
أو قم بتعديل علامة الاختبار الافتراضية مباشرةً في runtests.jl
:
# const LUX_TEST_GROUP = lowercase(get(ENV, "LUX_TEST_GROUP", "all"))
const LUX_TEST_GROUP = lowercase ( get ( ENV , " LUX_TEST_GROUP " , " core_layers " ))
ولكن تأكد من استعادة القيمة الافتراضية "الكل" قبل إرسال الرمز.
علاوة على ذلك، إذا كنت تريد إجراء اختبار محدد بناءً على اسم مجموعة الاختبار، فيمكنك استخدام TestEnv.jl على النحو التالي. ابدأ بتنشيط بيئة Lux ثم قم بتشغيل ما يلي:
using TestEnv; TestEnv . activate (); using ReTestItems;
# Assuming you are in the main directory of Lux
ReTestItems . runtests ( " tests/ " ; name = " NAME OF THE TEST " )
بالنسبة لاختبارات SkipConnection
التي ستكون:
ReTestItems . runtests ( " tests/ " ; name = " SkipConnection " )