0
下のコードでは、XGBoosterPredictを呼び出すとtrain_out_pbが上書きされます。 問題はおそらく非常に些細ですが、私はそれを見ることはできません。 1.st呼び出し後XGBoosterPredict第2の呼び出しは前に上書きされます
デバッガ出力:
- & train_out_pb 0x06d0eb2c {0x0074d060 {0.410961390}} CONSTフロート*
- & val_out_pb 0x06d0eb28 {0xFFFFFFFFの{???}} CONSTフロート* 第二コールの後
デバッガ出力:
- & train_out_pb 0x06d0eb2c {0x0074d060 {0.522293866}} CONSTフロート*
- & val_out_pb 0x06d0eb28 {0x0074d060 {0.522293866}} CONSTフロート*
コード:XGBoostのc_apiから
bst_ulong train_pred_len;
const float* train_out_pb = new float[train_num_samples]; //()
//1.st call
ret = XGBoosterPredict(h_booster, XY_train, 0, 0, &train_pred_len, &train_out_pb);
bst_ulong val_pred_len;
const float* val_out_pb = new float[val_num_samples];
//2.nd call
ret = XGBoosterPredict(h_booster, XY_val, 0, 0, &val_pred_len, &val_out_pb);
抜粋。 cc:
XGB_DLL int XGBoosterPredict(BoosterHandle handle,
DMatrixHandle dmat,
int option_mask,
unsigned ntree_limit,
xgboost::bst_ulong *len,
const bst_float **out_result)
{
std::vector<bst_float>& preds = XGBAPIThreadLocalStore::Get()->ret_vec_float;
API_BEGIN();
Booster *bst = static_cast<Booster*>(handle);
bst->LazyInit();
bst->learner()->Predict(
static_cast<std::shared_ptr<DMatrix>*>(dmat)->get(),
(option_mask & 1) != 0,
&preds, ntree_limit,
(option_mask & 2) != 0);
*out_result = dmlc::BeginPtr(preds);
*len = static_cast<xgboost::bst_ulong>(preds.size());
API_END();
}