Julia에서 Neural ODE의 훈련 된 매개 변수에 액세스하려면 어떻게해야합니까?

SimonAda

Julia의 DiffEqFlux를 사용하는 시계열에 하나의 신경 ODE를 맞추려고합니다. 여기 내 코드 :

u0 = Float32[2.;0]
train_size = 15
tspan_train = (0.0f0,0.75f0)

function trueODEfunc(du,u,p,t)
    true_A = [-0.1 2.0; -2.0 -0.1]
    du .= ((u.^3)'true_A)'
end

t_train = range(tspan_train[1],tspan_train[2],length = train_size)
prob = ODEProblem(trueODEfunc, u0, tspan_train)
ode_data_train = Array(solve(prob, Tsit5(),saveat=t_train))

dudt = Chain(
            Dense(2,50,tanh),
            Dense(50,2))
ps = Flux.params(dudt)
n_ode = NeuralODE(dudt, tspan_train, Tsit5(), saveat = t_train, reltol=1e-7, abstol=1e-9)

**n_ode.p**

function predict_n_ode(p)
    n_ode(u0,p)
end
function loss_n_ode(p)
    pred = predict_n_ode(p)
    loss = sum(abs2, ode_data_train .- pred)
    loss,pred
end

final_p = []
losses = []
cb = function(p,l,pred)
    display(l)
    display(p)
    push!(final_p, p)
    push!(losses,l)
    pl = scatter(t_train, ode_data_train[1,:],label="data")
    scatter!(pl,t_train,pred[1,:],label="prediction")
    display(plot(pl))
end

DiffEqFlux.sciml_train!(loss_n_ode, n_ode.p, ADAM(0.05), cb = cb, maxiters = 100)

**n_ode.p**

문제는 train 함수 전후에 n_ode.p(또는 Flux.params(dudt)) 을 호출 하면 저장 값이 반환 된다는 것 입니다. 교육에서 최신 업데이트 된 값을받을 것으로 예상했을 것입니다. 그래서 훈련 중에 모든 매개 변수 값을 수집하는 배열을 만든 다음 업데이트 된 매개 변수를 얻기 위해 액세스합니다.

코드에서 뭔가 잘못하고 있습니까? 열차 기능이 매개 변수를 자동으로 업데이트합니까? 그것을 시행하는 방법이 아니라면?

미리 감사드립니다!

크리스 라 카우 카스

결과는 최상의 매개 변수를 보유하는 객체입니다. 다음은 완전한 예입니다.

using DiffEqFlux, OrdinaryDiffEq, Flux, Optim, Plots

u0 = Float32[2.; 0.]
datasize = 30
tspan = (0.0f0,1.5f0)

function trueODEfunc(du,u,p,t)
    true_A = [-0.1 2.0; -2.0 -0.1]
    du .= ((u.^3)'true_A)'
end
t = range(tspan[1],tspan[2],length=datasize)
prob = ODEProblem(trueODEfunc,u0,tspan)
ode_data = Array(solve(prob,Tsit5(),saveat=t))

dudt2 = FastChain((x,p) -> x.^3,
            FastDense(2,50,tanh),
            FastDense(50,2))
n_ode = NeuralODE(dudt2,tspan,Tsit5(),saveat=t)

function predict_n_ode(p)
  n_ode(u0,p)
end

function loss_n_ode(p)
    pred = predict_n_ode(p)
    loss = sum(abs2,ode_data .- pred)
    loss,pred
end

loss_n_ode(n_ode.p) # n_ode.p stores the initial parameters of the neural ODE

cb = function (p,l,pred;doplot=false) #callback function to observe training
  display(l)
  # plot current prediction against data
  if doplot
    pl = scatter(t,ode_data[1,:],label="data")
    scatter!(pl,t,pred[1,:],label="prediction")
    display(plot(pl))
  end
  return false
end

# Display the ODE with the initial parameter values.
cb(n_ode.p,loss_n_ode(n_ode.p)...)

res1 = DiffEqFlux.sciml_train(loss_n_ode, n_ode.p, ADAM(0.05), cb = cb, maxiters = 300)
cb(res1.minimizer,loss_n_ode(res1.minimizer)...;doplot=true)
res2 = DiffEqFlux.sciml_train(loss_n_ode, res1.minimizer, LBFGS(), cb = cb)
cb(res2.minimizer,loss_n_ode(res2.minimizer)...;doplot=true)

# result is res2 as an Optim.jl object
# res2.minimizer are the best parameters
# res2.minimum is the best loss

마지막에 sciml_train함수는 최종 매개 변수를 포함하여 최적화에 대한 정보를 보유하는 결과 객체를 .minimizer.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

나뭇 가지 템플릿 내에서 parameters.yml에 정의 된 매개 변수에 액세스하려면 어떻게해야합니까?

분류에서Dev

Tableau에서 선택한 매개 변수의 특성에 액세스하려면 어떻게해야합니까?

분류에서Dev

Javascript에서 중첩 된 개체의 속성에 액세스하려면 어떻게해야합니까?

분류에서Dev

CNTK에서 훈련 된 매개 변수에 액세스

분류에서Dev

개체의 인스턴스에서 공용 변수에 액세스하려면 어떻게해야합니까?

분류에서Dev

개체 변수에 저장된 익명 유형의 필드에 액세스하려면 어떻게해야합니까?

분류에서Dev

자바 스크립트를 사용하여 함수에 전달 된 개체 매개 변수에 액세스하려면 어떻게해야합니까?

분류에서Dev

QT에서 프로그램에 전달 된 매개 변수에 액세스하려면 어떻게해야합니까?

분류에서Dev

Lua에서 내 함수에 매개 변수로 전달 된 함수에서 함수의 매개 변수를 얻으려면 어떻게해야합니까?

분류에서Dev

Newtonsoft.Json (C #)에서 중첩 된 JSON 개체에 액세스하려면 어떻게해야합니까?

분류에서Dev

둘 이상의 게시물에 대한 매개 변수에 액세스하거나 가져 오려면 어떻게해야합니까?

분류에서Dev

API 호출에서 반환 된 JSON 개체의 데이터에 액세스하려면 어떻게해야합니까?

분류에서Dev

netlogo에서 중첩 된 목록의 요소에 액세스하려면 어떻게해야합니까?

분류에서Dev

Angular JS의 .then ()에 정의 된 $ scope 배열에 액세스하려면 어떻게해야합니까?

분류에서Dev

전달 된 객체 내부의 데이터에 액세스하려면 어떻게해야합니까?

분류에서Dev

상속 된 코드의 다른 부분에 액세스하려면 어떻게해야합니까?

분류에서Dev

별도의 데이터 프레임에서 훈련 세트와 테스트 세트를 지정하려면 어떻게해야합니까?

분류에서Dev

이상한 이름의 개체에 쉽게 액세스하려면 어떻게해야합니까?

분류에서Dev

인스턴스에서 호출 된 "bind"메서드에 전달 된 미리 정의 된 함수 내에서 개체 인스턴스의 컨텍스트에 액세스하려면 어떻게해야합니까?

분류에서Dev

Android에서 결합 된 URL을 매개 변수로 전달하려면 어떻게해야합니까?

분류에서Dev

Android에서 결합 된 URL을 매개 변수로 전달하려면 어떻게해야합니까?

분류에서Dev

개체 내의 개체 속성에 액세스하려면 어떻게해야합니까?

분류에서Dev

벡터 벡터의 개별 요소에 액세스하고 인쇄하려면 어떻게해야합니까?

분류에서Dev

hybris의 지역화 된 .properties 파일에서 속성에 매개 변수를 추가하려면 어떻게해야합니까?

분류에서Dev

C #에서 GraphQLHttpClient에 두 개의 매개 변수를 전달하려면 어떻게해야합니까?

분류에서Dev

중첩 배열 내부의 개체 속성에 액세스하려면 어떻게해야합니까?

분류에서Dev

whatsLeft (self)에서 개별적으로 변수 날짜 및 연도의 데이터에 액세스하려면 어떻게해야합니까?

분류에서Dev

내 경로 URL에서 URL 매개 변수의 배치를 제어하려면 어떻게해야합니까?

분류에서Dev

자바 스크립트 함수 내에서 jquery를 통해 복제 된 요소의 속성에 액세스하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    나뭇 가지 템플릿 내에서 parameters.yml에 정의 된 매개 변수에 액세스하려면 어떻게해야합니까?

  2. 2

    Tableau에서 선택한 매개 변수의 특성에 액세스하려면 어떻게해야합니까?

  3. 3

    Javascript에서 중첩 된 개체의 속성에 액세스하려면 어떻게해야합니까?

  4. 4

    CNTK에서 훈련 된 매개 변수에 액세스

  5. 5

    개체의 인스턴스에서 공용 변수에 액세스하려면 어떻게해야합니까?

  6. 6

    개체 변수에 저장된 익명 유형의 필드에 액세스하려면 어떻게해야합니까?

  7. 7

    자바 스크립트를 사용하여 함수에 전달 된 개체 매개 변수에 액세스하려면 어떻게해야합니까?

  8. 8

    QT에서 프로그램에 전달 된 매개 변수에 액세스하려면 어떻게해야합니까?

  9. 9

    Lua에서 내 함수에 매개 변수로 전달 된 함수에서 함수의 매개 변수를 얻으려면 어떻게해야합니까?

  10. 10

    Newtonsoft.Json (C #)에서 중첩 된 JSON 개체에 액세스하려면 어떻게해야합니까?

  11. 11

    둘 이상의 게시물에 대한 매개 변수에 액세스하거나 가져 오려면 어떻게해야합니까?

  12. 12

    API 호출에서 반환 된 JSON 개체의 데이터에 액세스하려면 어떻게해야합니까?

  13. 13

    netlogo에서 중첩 된 목록의 요소에 액세스하려면 어떻게해야합니까?

  14. 14

    Angular JS의 .then ()에 정의 된 $ scope 배열에 액세스하려면 어떻게해야합니까?

  15. 15

    전달 된 객체 내부의 데이터에 액세스하려면 어떻게해야합니까?

  16. 16

    상속 된 코드의 다른 부분에 액세스하려면 어떻게해야합니까?

  17. 17

    별도의 데이터 프레임에서 훈련 세트와 테스트 세트를 지정하려면 어떻게해야합니까?

  18. 18

    이상한 이름의 개체에 쉽게 액세스하려면 어떻게해야합니까?

  19. 19

    인스턴스에서 호출 된 "bind"메서드에 전달 된 미리 정의 된 함수 내에서 개체 인스턴스의 컨텍스트에 액세스하려면 어떻게해야합니까?

  20. 20

    Android에서 결합 된 URL을 매개 변수로 전달하려면 어떻게해야합니까?

  21. 21

    Android에서 결합 된 URL을 매개 변수로 전달하려면 어떻게해야합니까?

  22. 22

    개체 내의 개체 속성에 액세스하려면 어떻게해야합니까?

  23. 23

    벡터 벡터의 개별 요소에 액세스하고 인쇄하려면 어떻게해야합니까?

  24. 24

    hybris의 지역화 된 .properties 파일에서 속성에 매개 변수를 추가하려면 어떻게해야합니까?

  25. 25

    C #에서 GraphQLHttpClient에 두 개의 매개 변수를 전달하려면 어떻게해야합니까?

  26. 26

    중첩 배열 내부의 개체 속성에 액세스하려면 어떻게해야합니까?

  27. 27

    whatsLeft (self)에서 개별적으로 변수 날짜 및 연도의 데이터에 액세스하려면 어떻게해야합니까?

  28. 28

    내 경로 URL에서 URL 매개 변수의 배치를 제어하려면 어떻게해야합니까?

  29. 29

    자바 스크립트 함수 내에서 jquery를 통해 복제 된 요소의 속성에 액세스하려면 어떻게해야합니까?

뜨겁다태그

보관