some potential fix

This commit is contained in:
tqchen 2015-03-11 09:43:42 -07:00
parent 8437e43afc
commit 03f34824b4
2 changed files with 10 additions and 8 deletions

View File

@ -69,11 +69,11 @@ class GBTree : public IGradBooster {
trees[i]->SaveModel(fo); trees[i]->SaveModel(fo);
} }
if (tree_info.size() != 0) { if (tree_info.size() != 0) {
fo.Write(&tree_info[0], sizeof(int) * tree_info.size()); fo.Write(BeginPtr(tree_info), sizeof(int) * tree_info.size());
} }
if (mparam.num_pbuffer != 0 && with_pbuffer) { if (mparam.num_pbuffer != 0 && with_pbuffer) {
fo.Write(&pred_buffer[0], pred_buffer.size() * sizeof(float)); fo.Write(BeginPtr(pred_buffer), pred_buffer.size() * sizeof(float));
fo.Write(&pred_counter[0], pred_counter.size() * sizeof(unsigned)); fo.Write(BeginPtr(pred_counter), pred_counter.size() * sizeof(unsigned));
} }
} }
// initialize the predic buffer // initialize the predic buffer
@ -99,7 +99,7 @@ class GBTree : public IGradBooster {
std::vector<bst_gpair> *in_gpair) { std::vector<bst_gpair> *in_gpair) {
const std::vector<bst_gpair> &gpair = *in_gpair; const std::vector<bst_gpair> &gpair = *in_gpair;
std::vector<std::vector<tree::RegTree*> > new_trees; std::vector<std::vector<tree::RegTree*> > new_trees;
if (mparam.num_output_group == 1) { if (mparam.num_output_group == 1) {
new_trees.push_back(BoostNewTrees(gpair, p_fmat, buffer_offset, info, 0)); new_trees.push_back(BoostNewTrees(gpair, p_fmat, buffer_offset, info, 0));
} else { } else {
const int ngroup = mparam.num_output_group; const int ngroup = mparam.num_output_group;

View File

@ -296,9 +296,10 @@ class TreeModel {
utils::Check(fi.Read(&param, sizeof(Param)) > 0, utils::Check(fi.Read(&param, sizeof(Param)) > 0,
"TreeModel: wrong format"); "TreeModel: wrong format");
nodes.resize(param.num_nodes); stats.resize(param.num_nodes); nodes.resize(param.num_nodes); stats.resize(param.num_nodes);
utils::Check(fi.Read(&nodes[0], sizeof(Node) * nodes.size()) > 0, utils::Assert(param.num_nodes != 0, "invalid model");
utils::Check(fi.Read(BeginPtr(nodes), sizeof(Node) * nodes.size()) > 0,
"TreeModel: wrong format"); "TreeModel: wrong format");
utils::Check(fi.Read(&stats[0], sizeof(NodeStat) * stats.size()) > 0, utils::Check(fi.Read(BeginPtr(stats), sizeof(NodeStat) * stats.size()) > 0,
"TreeModel: wrong format"); "TreeModel: wrong format");
if (param.size_leaf_vector != 0) { if (param.size_leaf_vector != 0) {
utils::Check(fi.Read(&leaf_vector), "TreeModel: wrong format"); utils::Check(fi.Read(&leaf_vector), "TreeModel: wrong format");
@ -322,8 +323,9 @@ class TreeModel {
utils::Assert(param.num_nodes == static_cast<int>(stats.size()), utils::Assert(param.num_nodes == static_cast<int>(stats.size()),
"Tree::SaveModel"); "Tree::SaveModel");
fo.Write(&param, sizeof(Param)); fo.Write(&param, sizeof(Param));
fo.Write(&nodes[0], sizeof(Node) * nodes.size()); utils::Assert(param.num_nodes != 0, "invalid model");
fo.Write(&stats[0], sizeof(NodeStat) * nodes.size()); fo.Write(BeginPtr(nodes), sizeof(Node) * nodes.size());
fo.Write(BeginPtr(stats), sizeof(NodeStat) * nodes.size());
if (param.size_leaf_vector != 0) fo.Write(leaf_vector); if (param.size_leaf_vector != 0) fo.Write(leaf_vector);
} }
/*! /*!