繁体   English   中英

AttributeError:无法获取属性“tokenizer”<module '__main__'>

[英]AttributeError: Can't get attribute 'tokenizer' on <module '__main__'>

我在文本数据上训练了一个logistic regression模型,并使用pickle保存了模型。 但是为了进行测试,当我尝试加载模型时,我在执行以下行时遇到了标题中提到的错误:

model = pickle.load(open("sentiment.model", "rb"))

以下是用于保存模型的代码:

import pickle

print("[INFO] saving Model...")
f = open('sentiment.model', "wb")

# first I saved the best_estimator_
f.write(pickle.dumps(gs_lr_tfidf.best_estimator_))

# but again I saved the model completely without mentioning any attribute i.e: 
# f.write(pickle.dumps(gs_lr_tfidf))
# but none of them helped and I got the same error

f.close()
print("[INFO] Model saved!")

当我在完成训练过程后(在同一运行时)将模型加载到同一笔记本中时,不会出现此错误。 但是,当我尝试在不同的运行时分别加载模型时,即使模型加载器代码相同,也会发生此错误。 为什么会这样?

我认为问题出在pickle的行为上,正如@hafiz031所说,在文件中运行相同的代码是正常的。 如此简短的回答是您需要在加载模型之前导入标记器(从您使用的任何库)

对于懂中文的人,你可以去这个CSDN 链接了解更多信息。

对于不懂中文的人,对不起我的英语不好,我会尽力解释。

文档说:

pickle.loads(data, /, *, fix_imports=True, encoding='ASCII', errors='strict', buffers=None)

返回对象的腌制表示数据的重构对象层次结构。 data必须是类似字节的对象。

如果您使用pickle.loads ,则有一个隐含的要求,必须在加载之前声明对象层次结构。 直觉上你可以想,当你把美元带到北极时,你想用美元换取企鹅钓鱼。 由于他们没有什么是金钱的概念,他们不会做交易。 和pickle一样,如果你之前没有导入tokenizer,在pickle将字节加载回tokenizer之后,他们不知道什么是'tokenizer'并返回错误给你。 这就是为什么您的代码在训练文件中工作但在将模型加载到不同文件中时失败的原因。

就我而言,我只是导入了一个额外的库。

# import your own lib
import pickle

import nltk.tokenizer
import genism
import sklearn
#...

model = pickle.load(open("sentiment.model", "rb"))
#model.predict()

AttributeError:无法获取属性“InsertNews” <module '__main__'< div><div id="text_translate"><p> 我正在尝试编写一个程序来抓取网站内容。 该脚本似乎运行了一段时间,但在几次迭代后停止</p><pre>Traceback (most recent call last): File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 300, in _run_finalizers finalizer() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 224, in __call__ res = self._callback(*self._args, **self._kwargs) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 581, in _terminate_pool cls._help_stuff_finish(inqueue, task_handler, len(pool)) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 568, in _help_stuff_finish inqueue._reader.recv() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\connection.py", line 251, in recv return _ForkingPickler.loads(buf.getbuffer()) AttributeError: Can't get attribute 'InsertNews' on &lt;module '__main__' from 'c:\\program files (x86)\\microsoft visual studio\\2019\\common7\\ide\\extensions\\microsoft\\python\\core\\debugpy\\__main__.py'&gt;</pre><p> 这是我要运行的脚本</p><pre>from boilerpy3 import extractors import pymongo import multiprocessing as mp def InsertNews(newsite, symbol): print(symbol) print(newsite) extractor = extractors.ArticleExtractor() try: content = extractor.get_content_from_url(newsite) except Exception: pass print(content) record={symbol,content} mydb["StocksPressRelease"].insert_one(record) if __name__ == "__main__": print("started") pool = mp.Pool(mp.cpu_count()) myclient = pymongo.MongoClient("mongodb+srv://un:pwd@cluster0.subkd.azure.mongodb.net/db?retryWrites=true&amp;w=majority&amp;connectTimeoutMS=900000") mydb = myclient["db"] mycol = mydb["Stocks"] for x in mycol.find({},{"_id": 0, "symbol":1, "newsite": 1 }): results = pool.apply_async(InsertNews,args=(x["newsite"],x["symbol"])) pool.close()</pre></div></module>

[英]AttributeError: Can't get attribute 'InsertNews' on <module '__main__'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AttributeError:无法获取属性“DataFrameSelector”<module '__main__'></module> AttributeError:无法获取属性“InsertNews” <module '__main__'< div><div id="text_translate"><p> 我正在尝试编写一个程序来抓取网站内容。 该脚本似乎运行了一段时间,但在几次迭代后停止</p><pre>Traceback (most recent call last): File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 300, in _run_finalizers finalizer() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 224, in __call__ res = self._callback(*self._args, **self._kwargs) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 581, in _terminate_pool cls._help_stuff_finish(inqueue, task_handler, len(pool)) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 568, in _help_stuff_finish inqueue._reader.recv() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\connection.py", line 251, in recv return _ForkingPickler.loads(buf.getbuffer()) AttributeError: Can't get attribute 'InsertNews' on &lt;module '__main__' from 'c:\\program files (x86)\\microsoft visual studio\\2019\\common7\\ide\\extensions\\microsoft\\python\\core\\debugpy\\__main__.py'&gt;</pre><p> 这是我要运行的脚本</p><pre>from boilerpy3 import extractors import pymongo import multiprocessing as mp def InsertNews(newsite, symbol): print(symbol) print(newsite) extractor = extractors.ArticleExtractor() try: content = extractor.get_content_from_url(newsite) except Exception: pass print(content) record={symbol,content} mydb["StocksPressRelease"].insert_one(record) if __name__ == "__main__": print("started") pool = mp.Pool(mp.cpu_count()) myclient = pymongo.MongoClient("mongodb+srv://un:pwd@cluster0.subkd.azure.mongodb.net/db?retryWrites=true&amp;w=majority&amp;connectTimeoutMS=900000") mydb = myclient["db"] mycol = mydb["Stocks"] for x in mycol.find({},{"_id": 0, "symbol":1, "newsite": 1 }): results = pool.apply_async(InsertNews,args=(x["newsite"],x["symbol"])) pool.close()</pre></div></module> Python 多处理错误:AttributeError: Can't get attribute 'task' on<module '__main__' (built-in)> "</module> AttributeError:无法获取属性“video_dataset”<module '__main__' (built-in)></module> AttributeError:无法获取属性“GaitDataset”<module '__main__' (built-in)></module> 多重处理错误“ AttributeError:无法获取属性&#39;testfuncxx&#39; AttributeError:无法获取属性“NaiveBayesSentiment”<module '__main__' from 'app.py'></module> AttributeError:无法获取属性<module '__main__' from 'manage.py'></module> /predict/ 处的 AttributeError 无法获取属性“人工神经元” 泡菜错误:AttributeError:无法获取属性<module '__main__' (built-in)></module>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM