コード例 #1
0
 def _truncated_normal(self, shape, dtype):
     key, counter = self._prepare_key_counter(shape)
     return gen_stateless_random_ops_v2.stateless_truncated_normal_v2(
         shape=shape,
         key=key,
         counter=counter,
         dtype=dtype,
         alg=self.algorithm)
コード例 #2
0
 def _truncated_normal(self, shape, dtype):
     if compat.forward_compatible(2020, 10, 25):
         key, counter = self._prepare_key_counter(shape)
         return gen_stateless_random_ops_v2.stateless_truncated_normal_v2(
             shape=shape,
             key=key,
             counter=counter,
             dtype=dtype,
             alg=self.algorithm)
     return gen_stateful_random_ops.stateful_truncated_normal(
         self.state.handle, self.algorithm, shape, dtype=dtype)
コード例 #3
0
def stateless_truncated_normal(shape,
                               seed,
                               mean=0.0,
                               stddev=1.0,
                               dtype=dtypes.float32,
                               name=None):
    """Outputs deterministic pseudorandom values, truncated normally distributed.

  This is a stateless version of `tf.random.truncated_normal`: if run twice with
  the same seeds and shapes, it will produce the same pseudorandom numbers.  The
  output is consistent across multiple runs on the same hardware (and between
  CPU and GPU), but may change between versions of TensorFlow or on non-CPU/GPU
  hardware.

  The generated values follow a normal distribution with specified mean and
  standard deviation, except that values whose magnitude is more than 2 standard
  deviations from the mean are dropped and re-picked.

  Args:
    shape: A 1-D integer Tensor or Python array. The shape of the output tensor.
    seed: A shape [2] Tensor, the seed to the random number generator. Must have
      dtype `int32` or `int64`. (When using XLA, only `int32` is allowed.)
    mean: A 0-D Tensor or Python value of type `dtype`. The mean of the
      truncated normal distribution.
    stddev: A 0-D Tensor or Python value of type `dtype`. The standard deviation
      of the normal distribution, before truncation.
    dtype: The type of the output.
    name: A name for the operation (optional).

  Returns:
    A tensor of the specified shape filled with random truncated normal values.
  """
    with ops.name_scope(name, "stateless_truncated_normal",
                        [shape, seed, mean, stddev]) as name:
        shape = tensor_util.shape_tensor(shape)
        mean = ops.convert_to_tensor(mean, dtype=dtype, name="mean")
        stddev = ops.convert_to_tensor(stddev, dtype=dtype, name="stddev")
        if compat.forward_compatible(2020, 10, 25):
            key, counter, alg = _get_key_counter_alg(seed)
            rnd = gen_stateless_random_ops_v2.stateless_truncated_normal_v2(
                shape, key=key, counter=counter, dtype=dtype, alg=alg)
        else:
            rnd = gen_stateless_random_ops.stateless_truncated_normal(
                shape, seed, dtype)
        result = math_ops.add(rnd * stddev, mean, name=name)
        tensor_util.maybe_set_static_shape(result, shape)
        return result