【发布时间】:2020-02-09 15:53:42
【问题描述】:
我有一个非常简单的数据集(30 行,32 列)。
我编写了一个 Python 程序来加载数据并训练 XGBoost 模型,然后将模型保存到磁盘。
我还编译了一个使用 libxgboost (C api) 并加载模型进行推理的 C++ 程序。
当使用相同的保存模型时,Python 和 C++ 对相同的输入(全零的单行)给出不同的结果。
xgboost 为 0.90,我已在此处附加所有文件(包括 numpy 数据文件):
https://www.dropbox.com/s/txao5ugq6mgssz8/xgboost_mismatch.tar?dl=0
这是两个程序的输出(其源代码在 .tar 文件中):
Python 程序
(在构建模型时打印几个字符串,然后打印单个数字输出)
$ python3 jl_functions_tiny.py
Loading data
Creating model
Training model
Saving model
Deleting model
Loading model
Testing model
[587558.2]
C++ 程序
(发出一个明显与单个 Python 数字输出不匹配的数字)
$ ./jl_functions
628180.062500
【问题讨论】:
-
“删除模型”是什么意思?从内存中删除,但仍然存在于磁盘中?
-
没错。由于 Python 的垃圾收集器,这实际上是无关紧要的,但我明确删除了它以证明新加载的模型仅来自磁盘而不是其他任何地方。
-
想知道你是否解决了这个问题。使用 1.1.1 将模型保存为 json 并在 C++ 中加载也会在我正在尝试的模型上给出不同的结果。
标签: python c++ machine-learning xgboost