【问题标题】:How do you Store and load a TFIdf vectorizer using pickle?如何使用 pickle 存储和加载 TFIdf 矢量化器?
【发布时间】:2020-07-14 03:47:14
【问题描述】:
def custom1(input):
      List1=[] 
    for i in input:
        List1.append(i)
    return List1
vectorizer = TfidfVectorizer(tokenizer=custom1)

安装我的矢量化器后。我转储它但是当我加载我的矢量化器时它说它找不到模块 custom1。有人可以帮忙吗?或者有其他方法可以加载和保存矢量化器吗?

AttributeError: Can't get attribute 'custom1' on main'

【问题讨论】:

    标签: tensorflow machine-learning pickle jnlp tfidfvectorizer


    【解决方案1】:

    首先我不明白你的函数在做什么,因为它只是将一个数组复制到另一个数组。能否详细说明一下?

    如果你想使用 pickle 存储一些东西,只需调用

    pickle.dump(vectorizer, open("vectorizer.pickle", "wb"))
    

    并在将来重新加载它,您可以使用

    vectorizer = pickle.load(open("vectorizer.pickle", "rb"))
    

    要腌制一个功能,我建议使用 Cloudpickle

    def custom1(input):
      return input
    
    pickledfunction = cloudpickle.dumps(custom1)
    pickle.loads(pickledfunction)([1,2,3])
    

    【讨论】:

    • 该函数的主要目标是获取一个字符串并返回该字符串中存在的字符列表。我用那个pickle命令来转储它。但是当我重新启动内核并加载它时,它会显示上述错误。
    • 看到主要的是当我使用我的 jupyter 笔记本时,我必须先运行包含自定义函数的单元格,然后当我加载矢量化器时它才能工作。我在烧瓶中使用这个应用程序,所以我复制了这个函数,复制它后我加载了模型。然后它给出了错误 custom1 找不到。
    • 所以你基本上不能简单地转储一个函数。它必须是可序列化的。您可以将函数包装在可序列化的类中,也可以使用可以帮助您腌制函数的 python 包。我建议使用github.com/cloudpipe/cloudpicklepypi.org/project/dill
    猜你喜欢
    • 2020-05-07
    • 2018-06-04
    • 2021-08-15
    • 2017-12-11
    • 2021-01-23
    • 2021-02-03
    • 2019-06-09
    • 2018-06-17
    • 2019-12-23
    相关资源
    最近更新 更多