【问题标题】:How to pickle a dictionary with models inside?如何腌制带有模型的字典?
【发布时间】:2021-09-16 08:55:16
【问题描述】:

我在各种数据上拟合了变形金刚模型 DistillBert,并将每个拟合模型保存在字典中

{dataname : 拟合 DistillBert 模型}

如何用pickle保存这本字典?如果pickle不起作用,我该如何使用dill来保存这本字典并利用其中的模型?

【问题讨论】:

    标签: python dictionary model pickle dill


    【解决方案1】:

    如果您使用 pytorch,则无需自行使用开箱即用的 pickle 来保存模型。因为torch.save() 和torch.load() 负责处理它。 torch.save 函数使用 Python 的 pickle 实用程序进行序列化。您可以使用它保存模型。

    在 Keras/Tensorflow 的情况下,您可以简单地使用 model.save() 而不是使用 pickle,即使 Keras 模型是 pickle-able。这样保存的模型将与未来版本的 Keras 兼容,并且可以在其他平台上使用。

    在任何情况下,您都可以使用dill 来存储它:

    import dill
    ...
    ...
    #class definition of model1's class
    ...
    #class definition of model2's class
    ...
    d = dict(a1=model1, a2=model2)
    
    with open("dillfilename", "wb") as dill_file:
        dill.dump(d , dill_file)
    

    同样你可以使用dill.load来加载dill文件。

    【讨论】:

    • 这是否包括带有模型的字典?我不想单独保存每个模型
    • @user16894190 你说的字典里面有模型是什么意思?您将使用torch.save 单独保存该模型。然后我们将找到保存的模型权重并使用torch.load()单独加载它。如果您的模型在其中使用任何其他模型,并且是数据流图的一部分,那么这将被视为单个模型
    • 正如我在问题中所说:我想将每个模型附加到字典中(我不想为每个模型添加 xxx 个单独的泡菜文件),然后泡菜这个字典以便稍后解开它接收保存在此字典中的所有模型
    • @user16894190 是的,您可以这样做,但这不是一个好的做法,而且在性能方面可能效率低下。
    • 我怎样才能做到这一点而不会收到任何错误?
    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2011-05-04
    相关资源
    最近更新 更多