XGB模型训练报错 terminate called after throwing an instance of ‘std::bad_alloc‘ what()
背景:需要做XGB模型增量訓(xùn)練,但是因?yàn)橐恍┰驔]有得到原來(lái)的XGB模型,只有dump文件。
XGB模型的dump文件是它的樹結(jié)構(gòu)存儲(chǔ)為一個(gè)相對(duì)人類好理解的模型文件,但并不能被重新加載進(jìn)XGB進(jìn)行增量訓(xùn)練。
嗯,說(shuō)是那么說(shuō),我尋思試一下,看看最新版的XGB有沒有增加這個(gè)功能,只載入dump文件就可以進(jìn)行XGB增量訓(xùn)練。
一跑起來(lái)沒報(bào)錯(cuò),我尋思可以呢。
一開始加載數(shù)據(jù)啥的都沒問(wèn)題,但是在訓(xùn)練的時(shí)候報(bào)錯(cuò):terminate called after throwing an instance of 'std::bad_alloc' what():,還把環(huán)境整崩了。
搜了一下,都說(shuō)這是內(nèi)存炸了導(dǎo)致的報(bào)錯(cuò),但是我看了一下監(jiān)控,內(nèi)存完全沒占滿。
到這我還一直以為可能是我訓(xùn)練數(shù)據(jù)太大,或者是后臺(tái)起的訓(xùn)練進(jìn)程太多才導(dǎo)致的,完全沒想過(guò)是不是dump文件的問(wèn)題。
是在解決不了了,去洗了個(gè)澡,突然間就想到了,可能是dump文件的問(wèn)題。
實(shí)驗(yàn)了一下,果然是,XGB模型增量訓(xùn)練只能在save_model保存的模型文件上訓(xùn)練,不能在dump_model的dump文件上訓(xùn)練,它不報(bào)解析錯(cuò)誤反而報(bào)了一個(gè)內(nèi)存錯(cuò)誤。
實(shí)驗(yàn)代碼:
import pandas as pd import xgboost as xgb import matplotlib.pyplot as pltfrom xgboost import plot_tree from xgboost import XGBClassifierdata = pd.read_csv("../input/default-of-credit-card-clients-dataset/UCI_Credit_Card.csv") X = data.iloc[:,1:6] y = data.iloc[:,24]data = xgb.DMatrix(X, y) xgb_params = {} model = xgb.train(xgb_params, data) print(model.get_dump()) model.save_model("model.pickle") model.dump_model("model.dump")xgb_params = {'process_type':'update', 'updater':'refresh', 'refresh_leaf':True} model_new = xgb.train(xgb_params, data, xgb_model="./model.pickle")xgb_params = {'process_type':'update', 'updater':'refresh', 'refresh_leaf':True} model_new = xgb.train(xgb_params, data, xgb_model="./model.dump") # 報(bào)錯(cuò)總結(jié)
以上是生活随笔為你收集整理的XGB模型训练报错 terminate called after throwing an instance of ‘std::bad_alloc‘ what()的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2017年第八届蓝桥杯 - 省赛 - C
- 下一篇: LeetCode Algorithm 5