我有一个应用程序,其中我正在加载非常大的Python对象--它们是序列化的scikit-learn分类器及其相关词汇表。
这些分类器足够大(大约为1-100 MB),将它们加载到内存中是一项不简单的任务。实际读取很快,但反序列化需要很长时间,对于4MB的分类器大约需要10秒钟。
是否有比cPickle.dumps / cPickle.loads更快的序列化/反序列化对象的方法?
额外的信息:
这些分类器是10个元素的一对多随机森林实例。这些分类器是在大约1000个样本,大约500个特征和52个可能标签上进行训练的。min_density参数设置为0。
cProfile输出cPickle.load:
这些分类器足够大(大约为1-100 MB),将它们加载到内存中是一项不简单的任务。实际读取很快,但反序列化需要很长时间,对于4MB的分类器大约需要10秒钟。
是否有比cPickle.dumps / cPickle.loads更快的序列化/反序列化对象的方法?
额外的信息:
这些分类器是10个元素的一对多随机森林实例。这些分类器是在大约1000个样本,大约500个特征和52个可能标签上进行训练的。min_density参数设置为0。
cProfile输出cPickle.load:
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 300.168 300.168 <ipython-input-4-9b8a128f290d>:1(loader)
1 0.899 0.899 301.067 301.067 <string>:1(<module>)
51380 288.151 0.006 288.151 0.006 __init__.py:93(__RandomState_ctor)
51380 0.059 0.000 0.404 0.000 fromnumeric.py:1774(amax)
1 11.613 11.613 300.168 300.168 {cPickle.load}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
51380 0.344 0.000 0.344 0.000 {method 'max' of 'numpy.ndarray' objects}
1 0.000 0.000 0.000 0.000 {open}
我正在github.com/scikit-learn上开一个问题(issue)来讨论这个问题。