【问题标题】:How to persist instance of a class in Python如何在 Python 中持久化一个类的实例
【发布时间】:2014-09-20 18:16:22
【问题描述】:

有没有办法在 Python 中将类的实例保存在内存或文件系统中?我可以用shelve 做到这一点吗?

以下行是this tutorial 的一部分,需要很长时间才能执行,我需要缓存它以供下一个程序执行。

clf = MultinomialNB().fit(X_train_counts, training_data['targets'])

clf 的类型:

>>> type(clf)
<class 'sklearn.naive_bayes.MultinomialNB'>

【问题讨论】:

    标签: python python-3.x object-persistence


    【解决方案1】:

    是的,您可以使用shelve 来持久化类的实例。 shelve 为您提供字典界面,使过程相对透明。

    在下面,shelve 使用pickle library;如果shelve API 不能满足您的需求,您可以直接进入该模块。

    scikit-learn 明确支持pickle,见Model persistence

    在训练 scikit-learn 模型后,希望有一种方法可以保留模型以供将来使用,而无需重新训练。以下部分提供了一个示例,说明如何使用 pickle 持久化模型。

    【讨论】:

    • pickle 对某些用户定义的对象没有问题吗?
    • @JakobBowyer:不,不是真的。 Pickle 可能对某些类型的对象有问题,但它并不特定于用户定义的对象。
    • @MartijnPieters:谢谢。我使用os.path.isfile 来检查转储文件是否存在以供加载。这是正确的方法吗?我使用链接中提到的 joblib。
    • @hpn:你可以使用os.path.isfile或者使用异常处理(try:open(...)except IOError: # handle file not being there)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多