如何保存一个热编码器?
Posted
技术标签:
【中文标题】如何保存一个热编码器?【英文标题】:How to save one hot encoder? 【发布时间】:2020-01-30 19:08:50 【问题描述】:我正在尝试从 keras 中保存一个热编码器,以便在不同的文本上再次使用它,但保持相同的编码。
这是我的代码:
df = pd.read_csv('dataset.csv ')
vocab_size = 200000
encoded_docs = [one_hot(d, vocab_size) for d in df.text]
如何保存此编码器并稍后再次使用?
我在研究中发现了this,但 one_hot() 似乎是一个函数而不是一个对象(对不起,如果这是完全错误的,我对 python 还很陌生)。
【问题讨论】:
酸洗不行吗? IE。import pickle; with open("encoder", "wb") as f: pickle.dump(one_hot, f)
。函数也是对象。
感谢您的回答,您的代码有效,我可以将其保存到文件中,但如何恢复和重新使用它?
import pickle; with open("encoder", "rb") as f: one_hot = pickle.load(f)
再次感谢,但是当我执行encoder = pickle.load(f)
和encoded_docs =[encoder(d, vocab_size) for d in df.text]
之后,编码似乎有所不同,就好像我用这一行重新训练了编码器一样。
啊哈!这种假定的编码是作弊,它使用hash()
来生成准唯一编码。由于哈希种子随机化,数字总是不同的。使用PYTHONHASHSEED=0 python
启动Python,然后它应该可以工作(并且您不需要腌制该函数,只需导入它即可)。
【参考方案1】:
为了社区的利益,在本节中提及答案(尽管它出现在评论部分)。
要保存编码器,可以使用以下代码:
import pickle
with open("encoder", "wb") as f:
pickle.dump(one_hot, f)
然后加载保存的编码器,使用以下代码:
encoder = pickle.load(f)
encoded_docs =[encoder(d, vocab_size) for d in df.text]
由于函数 from.keras.preprocessing.text import one_hot
使用 hash()
生成准唯一编码,我们需要使用 HashSeed
来重现我们的结果(即使在多次执行后也能得到相同的结果)。
在终端中运行以下代码,设置HashSeed
:
【讨论】:
【参考方案2】:前面的答案很棒,我找到了另一个需要joblib的可用选项
from joblib import dump, load
dump(clf, 'filename.joblib') # save the model
clf = load('filename.joblib') # load and reuse the model
【讨论】:
以上是关于如何保存一个热编码器?的主要内容,如果未能解决你的问题,请参考以下文章