我正在开展一个项目,目的是将机器学习项目中的培训和测试过程分开。我设计了代码来包装使用过的模型,而模型我的意思是分类器,例如,在类Model中。
class Model:
def init(self, newModel):
self.model = newModel
然后我使用列表传递模型必须提供的函数对象:
def addFunctions(self,functions):
for function in functions:
self.functions[function.__name_ _] = function
现在该模型可用于分类,例如通过使用分类器对象构造它并将其函数在列表中传递给addFunctions,以便我可以调用它们。然后我将模型和代码打包在docker容器中。为了简化它的功能,它是一个轻量级的虚拟机。
分离的目的是在优化它之后将训练好的模型传递给docker容器,而无需传递整个代码。因此,需要保存/序列化Python模型。
我尝试使用pickle以及jsonpickle,但在序列化某些类型的对象时,它们都有限制。我找不到任何通用的对象存储和检索。还有其他选择吗?
答案 0 :(得分:2)
dill
和cloudpickle
都是非常强大的序列化程序,并且可以序列化标准python中的几乎任何对象。 (我是dill
作者,顺便说一下。)
dill
可作为独立包提供:
https://github.com/uqfoundation/dill/
虽然cloudpickle
几乎已经死亡(它由picloud
支持,但它们已经商业化......并且已经将pyspark
和其他一些软件包支持在自己的代码库中了:
https://github.com/apache/spark/blob/master/python/pyspark/cloudpickle.py
我使用dill
作为统计计算和优化中并行和分布式计算的支柱,并使用它来实现并行机器学习技术。但我还没有尝试docker
个对象。