# From Scmil\_train to Optimization.jl

**URL:** <https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316>\
**Category:** General Usage\
**Created:** [February 8, 2023, 11:36pm UTC](https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316 "2023-02-08T23:36:54Z")\
**Posts on this page:** 7\
**Page:** 2

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 12, 2023, 1:32pm UTC](https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316/21 "2023-02-12T13:32:22Z")

</div>

Force ZygoteVJP and look at the error.

---

<div class="post-metadata">

**Author:** ![qjulia](https://avatars.discourse-cdn.com/v4/letter/q/dfb087/32.png) [@qjulia](https://discourse.julialang.org/u/qjulia)\
**Post date:** [February 12, 2023, 1:46pm UTC](https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316/22 "2023-02-12T13:46:25Z")

</div>

> [@ChrisRackauckas](#):
>
> ZygoteVJP

I was looking this page: [https://docs.juliahub.com/DiffEqSensitivity/02xYn/6.78.4/manual/differential\_equation\_sensitivities/#DiffEqSensitivity.ZygoteVJP](https://docs.juliahub.com/DiffEqSensitivity/02xYn/6.78.4/manual/differential_equation_sensitivities/#DiffEqSensitivity.ZygoteVJP)  
is this another package? because I can’t access anything regarding ZygoteVJP. Maybe this is the problem

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 12, 2023, 1:57pm UTC](https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316/23 "2023-02-12T13:57:36Z")

</div>

> [@qjulia](#):
>
> `ode_sol = solve(ode_nn, BS5(), p=Complex{Float64}.(p), abstol=tol, reltol=tol)`

ode\_sol = solve(ode\_nn, BS5(), p=Complex{Float64}.(p), abstol=tol, reltol=tol, sensealg = InterpolatingAdjoint(ZygoteVJP()))

---

<div class="post-metadata">

**Author:** ![qjulia](https://avatars.discourse-cdn.com/v4/letter/q/dfb087/32.png) [@qjulia](https://discourse.julialang.org/u/qjulia)\
**Post date:** [February 12, 2023, 9:48pm UTC](https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316/24 "2023-02-12T21:48:17Z")

</div>

Thanks, when I tried your advice, I am having “no method matching interpolatingadjoint” messgae:

> MethodError: no method matching InterpolatingAdjoint(::ZygoteVJP)  
> Closest candidates are:  
> InterpolatingAdjoint(; chunk\_size, autodiff, diff\_type, autojacvec, checkpointing, noisemixing) at ~/.julia/packages/SciMLSensitivity/Wb65g/src/sensitivity\_algorithms.jl:374
> 
> Stacktrace:  
> [1] macro expansion  
> @ ~/.julia/packages/Zygote/g2w9o/src/compiler/interface2.jl:0 [inlined]  
> [2] \_pullback(ctx::Zygote.Context{false}, f::Type{InterpolatingAdjoint}, args::ZygoteVJP)  
> @ Zygote ~/.julia/packages/Zygote/g2w9o/src/compiler/interface2.jl:9  
> [3] \_pullback  
> @ ./In[5]:39 [inlined]  
> [4] \_pullback(::Zygote.Context{false}, ::typeof(cost\_adjoint\_nn), ::ComponentArrays.ComponentVector{Float32, Vector{Float32}, Tuple{ComponentArrays.Axis{(layer\_1 = ViewAxis(1:64, Axis(weight = ViewAxis(1:32, ShapedAxis((32, 1), NamedTuple())), bias = ViewAxis(33:64, ShapedAxis((32, 1), NamedTuple())))), layer\_2 = ViewAxis(65:1120, Axis(weight = ViewAxis(1:1024, ShapedAxis((32, 32), NamedTuple())), bias = ViewAxis(1025:1056, ShapedAxis((32, 1), NamedTuple())))), layer\_3 = ViewAxis(1121:2176, Axis(weight = ViewAxis(1:1024, ShapedAxis((32, 32), NamedTuple())), bias = ViewAxis(1025:1056, ShapedAxis((32, 1), NamedTuple())))), layer\_4 = ViewAxis(2177:2242, Axis(weight = ViewAxis(1:64, ShapedAxis((2, 32), NamedTuple())), bias = ViewAxis(65:66, ShapedAxis((2, 1), NamedTuple())))))}}}, ::Float64)  
> @ Zygote ~/.julia/packages/Zygote/g2w9o/src/compiler/interface2.jl:0  
> [5] \_apply(::Function, ::Vararg{Any})  
> @ Core ./boot.jl:816  
> [6] adjoint  
> @ ~/.julia/packages/Zygote/g2w9o/src/lib/lib.jl:203 [inlined]  
> [7] \_pullback  
> @ ~/.julia/packages/ZygoteRules/AIbCs/src/adjoint.jl:65 [inlined]  
> [8] \_pullback  
> @ ~/.julia/packages/SciMLBase/ys6dl/src/scimlfunctions.jl:3596 [inlined]  
> [9] \_pullback(::Zygote.Context{false}, ::OptimizationFunction{true, Optimization.AutoZygote, typeof(cost\_adjoint\_nn), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT\_OBSERVED\_NO\_TIME), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, ::ComponentArrays.ComponentVector{Float32, Vector{Float32}, Tuple{ComponentArrays.Axis{(layer\_1 = ViewAxis(1:64, Axis(weight = ViewAxis(1:32, ShapedAxis((32, 1), NamedTuple())), bias = ViewAxis(33:64, ShapedAxis((32, 1), NamedTuple())))), layer\_2 = ViewAxis(65:1120, Axis(weight = ViewAxis(1:1024, ShapedAxis((32, 32), NamedTuple())), bias = ViewAxis(1025:1056, ShapedAxis((32, 1), NamedTuple())))), layer\_3 = ViewAxis(1121:2176, Axis(weight = ViewAxis(1:1024, ShapedAxis((32, 32), NamedTuple())), bias = ViewAxis(1025:1056, ShapedAxis((32, 1), NamedTuple())))), layer\_4 = ViewAxis(2177:2242, Axis(weight = ViewAxis(1:64, ShapedAxis((2, 32), NamedTuple())), bias = ViewAxis(65:66, ShapedAxis((2, 1), NamedTuple())))))}}}, ::Float64)  
> @ Zygote ~/.julia/packages/Zygote/g2w9o/src/compiler/interface2.jl:0  
> [10] \_apply(::Function, ::Vararg{Any})  
> @ Core ./boot.jl:816  
> [11] adjoint  
> @ ~/.julia/packages/Zygote/g2w9o/src/lib/lib.jl:203 [inlined]  
> [12] \_pullback  
> @ ~/.julia/packages/ZygoteRules/AIbCs/src/adjoint.jl:65 [inlined]  
> [13] \_pullback  
> @ ~/.julia/packages/Optimization/aPPOg/src/function/zygote.jl:30 [inlined]  
> [14] \_pullback(ctx::Zygote.Context{false}, f::Optimization.var"#156#165"{OptimizationFunction{true, Optimization.AutoZygote, typeof(cost\_adjoint\_nn), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT\_OBSERVED\_NO\_TIME), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Float64}, args::ComponentArrays.ComponentVector{Float32, Vector{Float32}, Tuple{ComponentArrays.Axis{(layer\_1 = ViewAxis(1:64, Axis(weight = ViewAxis(1:32, ShapedAxis((32, 1), NamedTuple())), bias = ViewAxis(33:64, ShapedAxis((32, 1), NamedTuple())))), layer\_2 = ViewAxis(65:1120, Axis(weight = ViewAxis(1:1024, ShapedAxis((32, 32), NamedTuple())), bias = ViewAxis(1025:1056, ShapedAxis((32, 1), NamedTuple())))), layer\_3 = ViewAxis(1121:2176, Axis(weight = ViewAxis(1:1024, ShapedAxis((32, 32), NamedTuple())), bias = ViewAxis(1025:1056, ShapedAxis((32, 1), NamedTuple())))), layer\_4 = ViewAxis(2177:2242, Axis(weight = ViewAxis(1:64, ShapedAxis((2, 32), NamedTuple())), bias = ViewAxis(65:66, ShapedAxis((2, 1), NamedTuple())))))}}})  
> @ Zygote ~/.julia/packages/Zygote/g2w9o/src/compiler/interface2.jl:0  
> [15] \_apply(::Function, ::Vararg{Any})

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 12, 2023, 11:04pm UTC](https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316/25 "2023-02-12T23:04:19Z")

</div>

autojacvec = … just see the docs and interpret what I was saying.

---

<div class="post-metadata">

**Author:** ![qjulia](https://avatars.discourse-cdn.com/v4/letter/q/dfb087/32.png) [@qjulia](https://discourse.julialang.org/u/qjulia)\
**Post date:** [February 13, 2023, 2:17am UTC](https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316/26 "2023-02-13T02:17:03Z")

</div>

I guess now it is done 🥳

1. I changed this line: `nn_output = Ωp_nn([t/T],p,st)#there was no st here` to `nn_output,_ = Ωp_nn([t/T],p,st)#there was no st here`
2. In any case, I added the following line too: `nn_output = Lux.ComponentArray(nn_output)`  
3)And then I listened your advise and I wrote that line: `ode_sol = solve(ode_nn, BS5(), p=Complex{Float64}.(p), abstol=tol, reltol=tol, sensealg = InterpolatingAdjoint(autojacvec=ZygoteVJP()))`  
and this part of script worked!  
I am closing this topic with the solution, if I have any further, I prefer to ask them under a new title

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 13, 2023, 12:07pm UTC](https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316/27 "2023-02-13T12:07:23Z")

</div>

Awesome, good to hear. Might be good to fix the typo in the title so it’s easier for people to find who are doing this change. Most of this is Flux → Lux though.

[Previous page](https://discourse.julialang.org/t/from-scmil-train-to-optimization-jl/94316.md?page=1)
