import Pkg
Pkg . add ( " Lux " )
팁
Lux.jl의 v1 이전 버전을 사용하는 경우 업데이트 방법에 대한 지침은 v1로 업데이트 섹션을 참조하세요.
패키지 | 안정 버전 | 월간 다운로드 | 총 다운로드 | 빌드 상태 |
---|---|---|---|---|
? Lux.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 }
}
또한 github 저장소에 별표를 표시하는 것도 고려해 보세요.
이 섹션은 다소 불완전합니다. 이 섹션을 완료하는 데 기여할 수 있습니까?.
Lux.jl
의 전체 테스트에는 시간이 오래 걸립니다. 코드의 일부를 테스트하는 방법은 다음과 같습니다.
각 @testitem
에는 해당 tags
있습니다. 예를 들면 다음과 같습니다.
@testitem " SkipConnection " setup = [SharedTestSetup] tags = [ :core_layers ]
예를 들어 SkipConnection
에 대한 테스트를 고려해 보겠습니다.
@testitem " SkipConnection " setup = [SharedTestSetup] tags = [ :core_layers ] begin
...
end
core_layers
테스트하여 SkipConnection
속한 그룹을 테스트할 수 있습니다. 이렇게 하려면 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 " ))
하지만 코드를 제출하기 전에 기본값인 "all"을 복원해야 합니다.
또한 테스트 세트 이름을 기반으로 특정 테스트를 실행하려면 다음과 같이 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 " )