使用 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)
所以,我想我的意思实际上是两件事
- 我要保存功能
- 我希望它有方法
foo(x)
可用,即如果 jld2
文件在其他地方打开它有方法 foo(x)
和 a = [1,2,3]
。
当有人构建机器学习模型并保存它时,它必须像这样工作,对吧?
真心希望大家能理解我在这里的意思。如果不是请告诉我。
好的,经过更多的研究和思考,我得出结论(很高兴被证明是错误的...)这是不可能的 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
这样的包正在做的事情。您在那里存储了一个包含信息的对象,但功能来自包,而不是您存储的对象。
不确定是否有人遇到过类似的问题,但如果是的话,我希望这些想法对您有所帮助。
我想在 JLD2
文件中保存一个函数。这甚至可能吗?如果可能的话如何?
using JLD2
a = [1,2,3]
function foo(x, y)
x .> y
end
foo(x) = foo(x, a)
save_object("stored.jld2", foo)
所以,我想我的意思实际上是两件事
- 我要保存功能
- 我希望它有方法
foo(x)
可用,即如果jld2
文件在其他地方打开它有方法foo(x)
和a = [1,2,3]
。
当有人构建机器学习模型并保存它时,它必须像这样工作,对吧?
真心希望大家能理解我在这里的意思。如果不是请告诉我。
好的,经过更多的研究和思考,我得出结论(很高兴被证明是错误的...)这是不可能的 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
这样的包正在做的事情。您在那里存储了一个包含信息的对象,但功能来自包,而不是您存储的对象。
不确定是否有人遇到过类似的问题,但如果是的话,我希望这些想法对您有所帮助。