使用 JLD2 保存函数

Save a Function with JLD2

我想在 JLD2 文件中保存一个函数。这甚至可能吗?如果可能的话如何?

using JLD2

a = [1,2,3]

function foo(x, y)
    x .> y
end

foo(x) = foo(x, a)

save_object("stored.jld2", foo)

所以,我想我的意思实际上是两件事

当有人构建机器学习模型并保存它时,它必须像这样工作,对吧?

真心希望大家能理解我在这里的意思。如果不是请告诉我。

好的,经过更多的研究和思考,我得出结论(很高兴被证明是错误的...)这是不可能的 and/or 不明智。问题中的评论建议使用机器学习包来保存模型,我认为这种方法解释了基本点...

您可以将数据存储在 jld2 个文件中,但不能将函数存储在 jld2 个文件中。我在这里尝试的是行不通的,因为

foo(x) = foo(x, a)

在全局环境中访问对象 a - 它不会神奇地将 a 的数据存储在函数中。此外,函数不能用 JLD2 保存 - 谁知道呢,后者可能在未来会改变。


很好,但是现在解决方案是什么??

您可以做的是存储数据...

using JLD2

a = [1,2,3]

save("bar.jld2", Dict("a" => a))

...并通过您 include().

的模块或脚本使该功能可用
include("module_with_foo_function.jl") 
using module_with_foo_function
using JLD2

my_dict = load("bar.jld2")
a = my_dict["a"]

foo(x) = foo(x, a)

如果您仔细想想,这正是像 MLJ 这样的包正在做的事情。您在那里存储了一个包含信息的对象,但功能来自包,而不是您存储的对象。

不确定是否有人遇到过类似的问题,但如果是的话,我希望这些想法对您有所帮助。