如何保存我的 class 以在另一个环境中加载
How to save my class to load in another environment
我在概念上想做一些简单的事情:保存一个 python 对象,以后我可以从另一个(不同的)程序访问它。
但问题是它有一个包装器(下面的 f(x))在新环境中没有被引用。
整整花了12个小时,感觉比开始的时候还要迷茫。我认为“泡菜”或“莳萝”等……是我应该做的。但是我 运行 遇到酸洗问题。但是在线阅读让我无所适从。 (顺便说一句,我试过 shap.save 但它有相同的问题领域并且无论如何都使用 pickle)。
import shap, pickle
model = ... (some tensorflow function)
def f(X):
...
return model.predict(...).flatten()
explainer = shap.KernelExplainer(f, X.iloc[:50, :])
with open(f"/tmp/{file}.pkl", 'wb') as fil:
# explainer.save(fil)
pickle.dump(explainer, fil)
这不起作用,因为它“找不到
属性 'f'”。这些看起来是我能找到的最有前途的文章,但我无法针对我的场景实施。
http://gael-varoquaux.info/programming/decoration-in-python-done-right-decorating-and-pickling.html
https://github.com/slundberg/shap/issues/295
Python: Can't pickle type X, attribute lookup failed
*** 请在评论中提供有关术语的建议,以改进我提问的方式,因为我不知道如何表达我的提示。
通常,在任何编程语言中,您都不会保存对象,而是将对象的属性保存到文件中。然后你应该创建一个函数来读取文件并将值填充到你的对象中。
您可以将您的对象制作成一个可安装的包,并将该包作为一个对象导入到您的程序中。
import pickle
class A(Object):
def __init__(self, var1, var2):
self.var1 = var1
sefl.var2 = var2
def dump_obj(self, fn):
pickle.dump(self, fn, pickle.HIGHEST_PROTOCOL)
在您要加载对象并将数据馈送到对象的文件中
import pickle
import file_with_object_A
def load_A(fn):
with open(fn, 'rb') as file:
new_a = pickle.load(fn)
# or alternatively, you can load each attribute into a variable and feed it to your object
var1, var2 = file.readline(fn)
my_new_A = A(var1, var2)
记得将详细说明函数 f(X)
的文件导入到新的代码文件中,可以是 包 的方式,也可以保留此 file 包含 f(X)
在与当前工作文件相同的目录中。
你可以看看这个答案Saving an Object (Data persistence)
我在概念上想做一些简单的事情:保存一个 python 对象,以后我可以从另一个(不同的)程序访问它。
但问题是它有一个包装器(下面的 f(x))在新环境中没有被引用。
整整花了12个小时,感觉比开始的时候还要迷茫。我认为“泡菜”或“莳萝”等……是我应该做的。但是我 运行 遇到酸洗问题。但是在线阅读让我无所适从。 (顺便说一句,我试过 shap.save 但它有相同的问题领域并且无论如何都使用 pickle)。
import shap, pickle
model = ... (some tensorflow function)
def f(X):
...
return model.predict(...).flatten()
explainer = shap.KernelExplainer(f, X.iloc[:50, :])
with open(f"/tmp/{file}.pkl", 'wb') as fil:
# explainer.save(fil)
pickle.dump(explainer, fil)
这不起作用,因为它“找不到 属性 'f'”。这些看起来是我能找到的最有前途的文章,但我无法针对我的场景实施。
http://gael-varoquaux.info/programming/decoration-in-python-done-right-decorating-and-pickling.html
https://github.com/slundberg/shap/issues/295
Python: Can't pickle type X, attribute lookup failed
*** 请在评论中提供有关术语的建议,以改进我提问的方式,因为我不知道如何表达我的提示。
通常,在任何编程语言中,您都不会保存对象,而是将对象的属性保存到文件中。然后你应该创建一个函数来读取文件并将值填充到你的对象中。 您可以将您的对象制作成一个可安装的包,并将该包作为一个对象导入到您的程序中。
import pickle
class A(Object):
def __init__(self, var1, var2):
self.var1 = var1
sefl.var2 = var2
def dump_obj(self, fn):
pickle.dump(self, fn, pickle.HIGHEST_PROTOCOL)
在您要加载对象并将数据馈送到对象的文件中
import pickle
import file_with_object_A
def load_A(fn):
with open(fn, 'rb') as file:
new_a = pickle.load(fn)
# or alternatively, you can load each attribute into a variable and feed it to your object
var1, var2 = file.readline(fn)
my_new_A = A(var1, var2)
记得将详细说明函数 f(X)
的文件导入到新的代码文件中,可以是 包 的方式,也可以保留此 file 包含 f(X)
在与当前工作文件相同的目录中。
你可以看看这个答案Saving an Object (Data persistence)