python - 如何在 MongoDB 中检索和应用使用 GridFS 保存的 Catboost 二进制模型文件
问题描述
我可以使用 GridFS 使用以下语法在 MongoDB 中保存大型 Catboost 模型:
# Export and save model as a file
model.save_model(file_path_model, format='cbm')
# Load exported file and insert in Mongo
with open(file_path_model, mode='rb') as file: # b is important -> binary
file_content_model = file.read()
binary_model = Binary(file_content_model)
# Get the gridfs object (will be save in fs.chunks)
fs = gridfs.GridFS(self.database)
# Store binary file in Mongo DB using grid_fs
new_id = fs.put(binary_model)
我还可以使用 GridFS objectid 从 MongoDB 检索二进制文件:
db = modelDBStorageManager.database
fs = gridfs.GridFS(db)
bin_model = fs.get( ObjectId(document['_id'])).read()
但我想做的是转换检索二进制模型,以便我可以将它重新应用于某些数据。
我尝试保存模型并使用.load_model()
Catboost 函数加载它:
# Saving the model
def save_binary_file(bin_model):
model1 = str(bin_model)
fo = open("./Catboost_binary_files/binary.cbm", "w")
fo.write(model1)
fo.close()
save_binary_file(bin_model)
# Trying to load back the model
from_file = CatBoostClassifier()
model = from_file.load_model("./Catboost_binary_files/binary.cbm", format = 'cbm')
我收到以下错误:
---------------------------------------------------------------------------
CatBoostError Traceback (most recent call last)
<ipython-input-21-35e2109c72ed> in <module>
1 from_file = CatBoostClassifier()
2
----> 3 model = from_file.load_model("./Catboost_binary_files/binary.cbm", format = 'cbm')
~/opt/anaconda2/envs/fsbo-fraud-catboost-py37/lib/python3.7/site-packages/catboost/core.py in load_model(self, fname, format)
2587 if not isinstance(fname, STRING_TYPES):
2588 raise CatBoostError("Invalid fname type={}: must be str().".format(type(fname)))
-> 2589 self._load_model(fname, format)
2590 return self
2591
~/opt/anaconda2/envs/fsbo-fraud-catboost-py37/lib/python3.7/site-packages/catboost/core.py in _load_model(self, model_file, format)
1313
1314 def _load_model(self, model_file, format):
-> 1315 self._object._load_model(model_file, format)
1316 self._set_trained_model_attributes()
1317 for key, value in iteritems(self._get_params()):
_catboost.pyx in _catboost._CatBoost._load_model()
_catboost.pyx in _catboost._CatBoost._load_model()
CatBoostError: catboost/libs/model/model.cpp:648: Incorrect model file descriptor
文件格式似乎有问题。
解决方案
推荐阅读
- r - 将反应输出存储在向量中 - Shiny R
- azure - Azure 应用服务未记录所有 App Insights 依赖项
- amazon-web-services - 为 CodeDeploy 使用最新的 ECS 任务修订
- linux - 无法在并行脚本中使用位置参数
- c# - 无法确定 JSON 对象类型系统参数异常
- c# - 如何使用 c# 将 TapGestureRecognizer 添加到从 JSON 创建的项目中?
- ruby-on-rails - Ruby on Rails 应用程序中的 sitemap.xml 问题
- reactjs - 如何将上下文与重定向联系起来
- typescript - 打字稿函数重载“没有重载匹配此调用”
- powershell - Get-ADUser 是否有某种形式的缓存?