我的机器学习环境中的许多功能都是确定性的。意思是,对于相同的输入,它们总是具有完全相同的输出。
由于我经常使用相同的参数调用这些函数,我想自动检测计算是否在之前完成。如果是,则从pickle文件重新加载,否则使用参数的散列计算并存储到pickle文件。
我该如何实现?有了包装类吗?装饰师?
答案 0 :(得分:1)
你可以使用一个装饰器来更新一个列表,其中包含每个被调用的函数的名称,以便以后在包装器中使用:
import pickle
called_functs = []
def called(f):
def call_wrapper(*args, **kwargs):
if f.__name__ in called_functs:
data = pickle.load(open('filename.txt'))
#do something with data
else:
global called_functs
called_functs.append(f.__name__)
pickle.dump([args, kwargs, f(*args, **kwargs)], open('filename.txt', 'w'))
return call_wrapper
@called
def backpropagate(*args, **kwargs): #example from a neural net
pass
#do something