我的机器学习环境中的许多函数都是确定性的。这意味着,对于相同的输入,它们始终具有完全相同的输出。
由于我经常使用相同的参数调用这些函数,因此我想自动检测之前是否完成过计算。如果是,请从 pickle 文件重新加载,否则计算并使用参数哈希存储到 pickle 文件中。
我该如何实现?使用包装类?装饰师?
您可以使用一个装饰器来更新列表,其中包含稍后在包装器中使用的每个函数的名称:
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