Пример #1
0
 def when_multiple_values():
     """When input data contains multiple values."""
     bucket_width = range_ / tf.cast(bucket_count, tf.float64)
     offsets = data - min_
     bucket_indices = tf.cast(tf.floor(offsets / bucket_width),
                              dtype=tf.int32)
     clamped_indices = tf.minimum(bucket_indices, bucket_count - 1)
     # Use float64 instead of float32 to avoid accumulating floating point error
     # later in tf.reduce_sum when summing more than 2^24 individual `1.0` values.
     # See https://github.com/tensorflow/tensorflow/issues/51419 for details.
     one_hots = tf.one_hot(clamped_indices,
                           depth=bucket_count,
                           dtype=tf.float64)
     bucket_counts = tf.cast(
         tf.reduce_sum(input_tensor=one_hots, axis=0),
         dtype=tf.float64,
     )
     edges = tf.linspace(min_, max_, bucket_count + 1)
     # Ensure edges[-1] == max_, which TF's linspace implementation does not
     # do, leaving it subject to the whim of floating point rounding error.
     edges = tf.concat([edges[:-1], [max_]], 0)
     left_edges = edges[:-1]
     right_edges = edges[1:]
     return tf.transpose(
         a=tf.stack([left_edges, right_edges, bucket_counts]))
Пример #2
0
 def when_nonsingular():
   bucket_width = range_ / tf.cast(bucket_count, tf.float64)
   offsets = data - min_
   bucket_indices = tf.cast(tf.floor(offsets / bucket_width),
                            dtype=tf.int32)
   clamped_indices = tf.minimum(bucket_indices, bucket_count - 1)
   one_hots = tf.one_hot(clamped_indices, depth=bucket_count)
   bucket_counts = tf.cast(tf.reduce_sum(input_tensor=one_hots, axis=0),
                           dtype=tf.float64)
   edges = tf.linspace(min_, max_, bucket_count + 1)
   # Ensure edges[-1] == max_, which TF's linspace implementation does not
   # do, leaving it subject to the whim of floating point rounding error.
   edges = tf.concat([edges[:-1], [max_]], 0)
   left_edges = edges[:-1]
   right_edges = edges[1:]
   return tf.transpose(a=tf.stack(
       [left_edges, right_edges, bucket_counts]))