def _initialize(self):
   if self._is_scalar:
     return gen_stats_accumulator_ops.create_stats_accumulator_scalar(
         self.resource_handle, self._stamp_token)
   else:
     return gen_stats_accumulator_ops.create_stats_accumulator_tensor(
         self.resource_handle, self._stamp_token,
         self._gradient_shape.as_list(), self._hessian_shape.as_list())
 def initialize(self):
     if self._is_scalar:
         return gen_stats_accumulator_ops.create_stats_accumulator_scalar(
             self.resource_handle, self._stamp_token)
     else:
         return gen_stats_accumulator_ops.create_stats_accumulator_tensor(
             self.resource_handle, self._stamp_token,
             self._gradient_shape.as_list(), self._hessian_shape.as_list())
예제 #3
0
  def __init__(self,
               stamp_token,
               gradient_shape,
               hessian_shape,
               name=None,
               container=None):
    """Creates a stats accumulator and returns a handle to it.

    Args:
      stamp_token: An int64, initial value to use for the stamp token.
      gradient_shape: A TensorShape, containing shape of gradients.
      hessian_shape: A TensorShape, containing shape of hessians.
      name: A name for the stats accumulator variable.
      container: An optional `string`. Defaults to `""`.

    Returns:
      A `Tensor` of type mutable `string`. The handle to the stats accumulator.
    """
    with ops.name_scope(name, "StatsAccumulator") as name:
      # Both values are scalars.
      if (gradient_shape == tensor_shape.scalar() and
          hessian_shape == tensor_shape.scalar()):
        self._is_scalar = True
        self._resource_handle = (gen_stats_accumulator_ops.
                                 stats_accumulator_scalar_resource_handle_op(
                                     container, name, name=name))

        create_op = gen_stats_accumulator_ops.create_stats_accumulator_scalar(
            self._resource_handle, stamp_token)
        is_initialized_op = (
            gen_stats_accumulator_ops.stats_accumulator_scalar_is_initialized(
                self._resource_handle))
      else:
        self._is_scalar = False
        self._resource_handle = (gen_stats_accumulator_ops.
                                 stats_accumulator_tensor_resource_handle_op(
                                     container, name, name=name))
        create_op = gen_stats_accumulator_ops.create_stats_accumulator_tensor(
            self._resource_handle, stamp_token, gradient_shape.as_list(),
            hessian_shape.as_list())
        is_initialized_op = (
            gen_stats_accumulator_ops.stats_accumulator_scalar_is_initialized(
                self._resource_handle))

    self._create_op = create_op
    slice_spec = ""
    saver_name = self._resource_handle.name
    (stamp_token, num_updates, partition_ids, feature_ids, gradients,
     hessians) = self.serialize()
    specs = [
        saver.BaseSaverBuilder.SaveSpec(stamp_token, slice_spec,
                                        saver_name + "_stamp"),
        saver.BaseSaverBuilder.SaveSpec(num_updates, slice_spec,
                                        saver_name + "_num_updates"),
        saver.BaseSaverBuilder.SaveSpec(partition_ids, slice_spec,
                                        saver_name + "_partition_ids"),
        saver.BaseSaverBuilder.SaveSpec(feature_ids, slice_spec,
                                        saver_name + "_feature_ids"),
        saver.BaseSaverBuilder.SaveSpec(gradients, slice_spec,
                                        saver_name + "_gradients"),
        saver.BaseSaverBuilder.SaveSpec(hessians, slice_spec,
                                        saver_name + "hessians"),
    ]

    super(StatsAccumulator, self).__init__(self._resource_handle, specs, name)
    resources.register_resource(self._resource_handle, create_op,
                                is_initialized_op)
    ops.add_to_collection(ops.GraphKeys.SAVEABLE_OBJECTS, self)
예제 #4
0
    def __init__(self,
                 stamp_token,
                 gradient_shape,
                 hessian_shape,
                 name=None,
                 container=None):
        """Creates a stats accumulator and returns a handle to it.

    Args:
      stamp_token: An int64, initial value to use for the stamp token.
      gradient_shape: A TensorShape, containing shape of gradients.
      hessian_shape: A TensorShape, containing shape of hessians.
      name: A name for the stats accumulator variable.
      container: An optional `string`. Defaults to `""`.

    Returns:
      A `Tensor` of type mutable `string`. The handle to the stats accumulator.
    """
        if name is not None:
            name = _PATTERN.sub("", name)
        with ops.name_scope(name, "StatsAccumulator") as name:
            # Both values are scalars.
            if (gradient_shape == tensor_shape.scalar()
                    and hessian_shape == tensor_shape.scalar()):
                self._is_scalar = True
                self._resource_handle = (
                    gen_stats_accumulator_ops.
                    stats_accumulator_scalar_resource_handle_op(container,
                                                                name,
                                                                name=name))

                create_op = gen_stats_accumulator_ops.create_stats_accumulator_scalar(
                    self._resource_handle, stamp_token)
                is_initialized_op = (gen_stats_accumulator_ops.
                                     stats_accumulator_scalar_is_initialized(
                                         self._resource_handle))
            else:
                self._is_scalar = False
                self._resource_handle = (
                    gen_stats_accumulator_ops.
                    stats_accumulator_tensor_resource_handle_op(container,
                                                                name,
                                                                name=name))
                create_op = gen_stats_accumulator_ops.create_stats_accumulator_tensor(
                    self._resource_handle, stamp_token,
                    gradient_shape.as_list(), hessian_shape.as_list())
                is_initialized_op = (gen_stats_accumulator_ops.
                                     stats_accumulator_tensor_is_initialized(
                                         self._resource_handle))

        self._create_op = create_op
        slice_spec = ""
        saver_name = self._resource_handle.name
        (stamp_token, num_updates, partition_ids, feature_ids, gradients,
         hessians) = self.serialize()
        specs = [
            saver.BaseSaverBuilder.SaveSpec(stamp_token, slice_spec,
                                            saver_name + "_stamp"),
            saver.BaseSaverBuilder.SaveSpec(num_updates, slice_spec,
                                            saver_name + "_num_updates"),
            saver.BaseSaverBuilder.SaveSpec(partition_ids, slice_spec,
                                            saver_name + "_partition_ids"),
            saver.BaseSaverBuilder.SaveSpec(feature_ids, slice_spec,
                                            saver_name + "_feature_ids"),
            saver.BaseSaverBuilder.SaveSpec(gradients, slice_spec,
                                            saver_name + "_gradients"),
            saver.BaseSaverBuilder.SaveSpec(hessians, slice_spec,
                                            saver_name + "hessians"),
        ]

        super(StatsAccumulator, self).__init__(self._resource_handle, specs,
                                               name)
        resources.register_resource(self._resource_handle, create_op,
                                    is_initialized_op)
        ops.add_to_collection(ops.GraphKeys.SAVEABLE_OBJECTS, self)