51 double sum_loss = 0.0;
52 int num_tree_per_iteration = num_class_;
53 int num_pred_per_row = num_class_;
54 if (objective !=
nullptr) {
55 num_tree_per_iteration = objective->NumModelPerIteration();
56 num_pred_per_row = objective->NumPredictOneRow();
58 if (objective !=
nullptr) {
59 if (weights_ ==
nullptr) {
60 #pragma omp parallel for schedule(static) reduction(+:sum_loss)
62 std::vector<double> raw_score(num_tree_per_iteration);
63 for (
int k = 0; k < num_tree_per_iteration; ++k) {
64 size_t idx =
static_cast<size_t>(num_data_) * k + i;
65 raw_score[k] =
static_cast<double>(score[idx]);
67 std::vector<double> rec(num_pred_per_row);
68 objective->ConvertOutput(raw_score.data(), rec.data());
70 sum_loss += PointWiseLossCalculator::LossOnPoint(label_[i], rec);
73 #pragma omp parallel for schedule(static) reduction(+:sum_loss)
75 std::vector<double> raw_score(num_tree_per_iteration);
76 for (
int k = 0; k < num_tree_per_iteration; ++k) {
77 size_t idx =
static_cast<size_t>(num_data_) * k + i;
78 raw_score[k] =
static_cast<double>(score[idx]);
80 std::vector<double> rec(num_pred_per_row);
81 objective->ConvertOutput(raw_score.data(), rec.data());
83 sum_loss += PointWiseLossCalculator::LossOnPoint(label_[i], rec) * weights_[i];
87 if (weights_ ==
nullptr) {
88 #pragma omp parallel for schedule(static) reduction(+:sum_loss)
90 std::vector<double> rec(num_tree_per_iteration);
91 for (
int k = 0; k < num_tree_per_iteration; ++k) {
92 size_t idx =
static_cast<size_t>(num_data_) * k + i;
93 rec[k] =
static_cast<double>(score[idx]);
96 sum_loss += PointWiseLossCalculator::LossOnPoint(label_[i], rec);
99 #pragma omp parallel for schedule(static) reduction(+:sum_loss)
101 std::vector<double> rec(num_tree_per_iteration);
102 for (
int k = 0; k < num_tree_per_iteration; ++k) {
103 size_t idx =
static_cast<size_t>(num_data_) * k + i;
104 rec[k] =
static_cast<double>(score[idx]);
107 sum_loss += PointWiseLossCalculator::LossOnPoint(label_[i], rec) * weights_[i];
111 double loss = sum_loss / sum_weights_;
112 return std::vector<double>(1, loss);