# Save and load the model generated by surrogates.jl

**URL:** <https://discourse.julialang.org/t/save-and-load-the-model-generated-by-surrogates-jl/83302>\
**Category:** Modelling & Simulations\
**Created:** [June 24, 2022, 11:00am UTC](https://discourse.julialang.org/t/save-and-load-the-model-generated-by-surrogates-jl/83302 "2022-06-24T11:00:40Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jack\_Tang](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jack_tang/32/33751_2.png) [@Jack\_Tang](https://discourse.julialang.org/u/Jack_Tang)\
**Post date:** [June 24, 2022, 11:00am UTC](https://discourse.julialang.org/t/save-and-load-the-model-generated-by-surrogates-jl/83302/1 "2022-06-24T11:00:40Z")

</div>

Hello Community,

How can I save and load the model generated by surrogates.jl?

---

<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:** [June 24, 2022, 12:46pm UTC](https://discourse.julialang.org/t/save-and-load-the-model-generated-by-surrogates-jl/83302/2 "2022-06-24T12:46:27Z")

</div>

IIRC JLD2 works.

---

<div class="post-metadata">

**Author:** ![Jack\_Tang](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jack_tang/32/33751_2.png) [@Jack\_Tang](https://discourse.julialang.org/u/Jack_Tang)\
**Post date:** [June 24, 2022, 2:18pm UTC](https://discourse.julialang.org/t/save-and-load-the-model-generated-by-surrogates-jl/83302/3 "2022-06-24T14:18:18Z")

</div>

Thanks!

---

<div class="post-metadata">

**Author:** ![Jack\_Tang](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jack_tang/32/33751_2.png) [@Jack\_Tang](https://discourse.julialang.org/u/Jack_Tang)\
**Post date:** [July 28, 2022, 8:52am UTC](https://discourse.julialang.org/t/save-and-load-the-model-generated-by-surrogates-jl/83302/4 "2022-07-28T08:52:55Z")

</div>

@ChrisRackauckas  
After some tests, I think JLD2 or BSON can’t serialize the Julia function, and the Surrogates.jl returns Julia function as result. For example, RandomForestSurrogate returns the model `(::RandomForestSurrogate{Vector{Float64}, Vector{Float64}, XGBoost.Booster, Float64, Float64, Int64}) (generic function with 2 methods)`.

When I load the model, it throws the error:

```julia
UndefVarError: XGBoost not defined

Stacktrace:
  [1] (::BSON.var"#31#32")(m::Module, f::String)
    @ BSON ~/.julia/packages/BSON/rOaki/src/extensions.jl:21
  [2] BottomRF
    @ ./reduce.jl:81 [inlined]
  [3] _foldl_impl(op::Base.BottomRF{BSON.var"#31#32"}, init::Module, itr::Vector{Any})
    @ Base ./reduce.jl:58
  [4] foldl_impl
    @ ./reduce.jl:48 [inlined]
  [5] mapfoldl_impl
    @ ./reduce.jl:44 [inlined]
  [6] _mapreduce_dim
    @ ./reducedim.jl:327 [inlined]
  [7] #mapreduce#725
    @ ./reducedim.jl:322 [inlined]
  [8] #reduce#727
    @ ./reducedim.jl:371 [inlined]
  [9] resolve(fs::Vector{Any}, init::Module)
    @ BSON ~/.julia/packages/BSON/rOaki/src/extensions.jl:21
 [10] (::BSON.var"#35#36")(d::Dict{Symbol, Any}, init::Module)
    @ BSON ~/.julia/packages/BSON/rOaki/src/extensions.jl:64
 [11] _raise_recursive(d::Dict{Symbol, Any}, cache::IdDict{Any, Any}, init::Module)
    @ BSON ~/.julia/packages/BSON/rOaki/src/read.jl:80

```

I am from python to Julia, and confused that is there any `fit` method in Surrogates.jl ?

---

<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:** [July 28, 2022, 10:31am UTC](https://discourse.julialang.org/t/save-and-load-the-model-generated-by-surrogates-jl/83302/5 "2022-07-28T10:31:58Z")

</div>

> [@Jack\_Tang](#):
>
> After some tests, I think JLD2 or BSON can’t serialize the Julia function, and the Surrogates.jl returns Julia function as result. For example, RandomForestSurrogate returns the model `(::RandomForestSurrogate{Vector{Float64}, Vector{Float64}, XGBoost.Booster, Float64, Float64, Int64}) (generic function with 2 methods)`.
> 
> When I load the model, it throws the error:

Open an issue.
