aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/boosted_trees/kernels/split_handler_ops.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/contrib/boosted_trees/kernels/split_handler_ops.cc')
-rw-r--r--tensorflow/contrib/boosted_trees/kernels/split_handler_ops.cc30
1 files changed, 12 insertions, 18 deletions
diff --git a/tensorflow/contrib/boosted_trees/kernels/split_handler_ops.cc b/tensorflow/contrib/boosted_trees/kernels/split_handler_ops.cc
index 51e0c2e431..8edb5d6c64 100644
--- a/tensorflow/contrib/boosted_trees/kernels/split_handler_ops.cc
+++ b/tensorflow/contrib/boosted_trees/kernels/split_handler_ops.cc
@@ -579,13 +579,6 @@ class BuildSparseInequalitySplitsOp : public OpKernel {
const int end_index =
partition_boundaries[non_empty_partitions[root_idx]][j + 1]
.start_index;
- CHECK(bucket_ids_and_dimensions(start_index, 1) ==
- bucket_ids_and_dimensions(end_index - 1, 1))
- << "For bucket " << bucket_ids_and_dimensions(start_index, 0)
- << " the dimension was "
- << bucket_ids_and_dimensions(start_index, 1) << " and for "
- << bucket_ids_and_dimensions(end_index - 1, 0) << " "
- << bucket_ids_and_dimensions(end_index - 1, 1);
if (bucket_ids_and_dimensions(start_index, 0) == bias_feature_id) {
// 0-dimension case which has a first bucket for catch all feature.
CHECK(bucket_ids_and_dimensions(start_index, 1) == 0)
@@ -746,21 +739,22 @@ class BuildCategoricalEqualitySplitsOp : public OpKernel {
// Find the number of unique partitions before we allocate the output.
std::vector<int32> partition_boundaries;
- std::vector<int32> non_empty_partitions;
- for (int i = 0; i < partition_ids.size() - 1; ++i) {
+ partition_boundaries.push_back(0);
+ for (int i = 1; i < partition_ids.size(); ++i) {
// Make sure the input is sorted by partition_ids;
- CHECK_LE(partition_ids(i), partition_ids(i + 1));
- if (i == 0 || partition_ids(i) != partition_ids(i - 1)) {
+ OP_REQUIRES(context, partition_ids(i - 1) <= partition_ids(i),
+ errors::InvalidArgument("Partition IDs must be sorted."));
+ if (partition_ids(i) != partition_ids(i - 1)) {
partition_boundaries.push_back(i);
- // Some partitions might only have bias feature. We don't want to split
- // those so check that the partition has at least 2 features.
- if (partition_ids(i) == partition_ids(i + 1)) {
- non_empty_partitions.push_back(partition_boundaries.size() - 1);
- }
}
}
- if (partition_ids.size() > 0) {
- partition_boundaries.push_back(partition_ids.size());
+ std::vector<int32> non_empty_partitions;
+ partition_boundaries.push_back(partition_ids.size());
+ for (int i = 0; i < partition_boundaries.size() - 1; ++i) {
+ // We want to ignore partitions with only the bias term.
+ if (partition_boundaries[i + 1] - partition_boundaries[i] >= 2) {
+ non_empty_partitions.push_back(i);
+ }
}
int num_elements = non_empty_partitions.size();
Tensor* output_partition_ids_t = nullptr;