Python 缓存模型时MXNet预测不起作用

Python 缓存模型时MXNet预测不起作用,python,numpy,mxnet,functools,Python,Numpy,Mxnet,Functools,我在MyModel类中有一个MXNet多层接收器。 我首先从文件中加载经过训练的权重。 我使用MLP执行预测,如下所示: class MyModel: ... def predict(self, X): data_iterator = mx.io.NDArrayIter(data=X, batch_size=self.model.data_shapes[0].shape[0], shuffle=False) predicti

我在MyModel类中有一个MXNet多层接收器。 我首先从文件中加载经过训练的权重。 我使用MLP执行预测,如下所示:

class MyModel:
    ...
    def predict(self, X):
         data_iterator = mx.io.NDArrayIter(data=X, 
         batch_size=self.model.data_shapes[0].shape[0], shuffle=False)
         predictions_npa = self.model.predict(data_iterator ).asnumpy()
其中X是一个numpy数组(1777)

现在,我第一次执行MyModel.predict,它非常有效。 然后,我将MyModel实例存储在functools.LRUCache中,并尝试使用完全相同的输入执行第二次预测

每次这样做时,我的python进程都会停止做任何事情,没有日志,没有操作,也不会退出。我只知道,当我试图在PyCharm调试器中检查self.model.predict(数据迭代器)的结果时,我得到了一个加载错误

所以我对那里发生的事情有点困惑,如果有人有想法的话,这会是一个很大的帮助


谢谢

这可能是因为您必须重新创建
数据\u迭代器
data\u iterator
一旦完成就会被检查,下一个调用将引发错误。

是的,我忘记提了,但是data\u iterator是在我的类的predict方法中创建的(我编辑了问题),所以每次调用MyClass.predict,正在重新创建迭代器。如何使用functools.lru\u缓存?您是将
@lru\u缓存(maxsize=…)
装饰器放在预测方法之前,还是放在模型之前?另外,如果您在一个程序中进行两个调用,一个没有lru_缓存,一个有lru_缓存,或者您只运行两个不同的程序,我也不太明白。我会:cacher=cachetools.LRUCache(maxsize=20),我执行一个MyModel.predict,然后像这样存储MyModel实例:cacher['model']=my_实例。然后我做:model=cacher['model']和model.predict