Skip to content

_random_uniform_like

random_uniform_like

Generate noise shaped like tensor from a random normal distribution with a given mean and std.

This method can be used with Numpy data:

n = np.array([[0,1],[2,3]])
b = fe.backend.random_uniform_like(n)  # [[0.62, 0.49], [0.88, 0.37]]
b = fe.backend.random_uniform_like(n, minval=-5.0, maxval=-3)  # [[-3.8, -4.4], [-4.8, -4.9]]

This method can be used with TensorFlow tensors:

t = tf.constant([[0,1],[2,3]])
b = fe.backend.random_uniform_like(t)  # [[0.62, 0.49], [0.88, 0.37]]
b = fe.backend.random_uniform_like(t, minval=-5.0, maxval=-3)  # [[-3.8, -4.4], [-4.8, -4.9]]

This method can be used with PyTorch tensors:

p = torch.tensor([[0,1],[2,3]])
b = fe.backend.random_uniform_like(p)  # [[0.62, 0.49], [0.88, 0.37]]
b = fe.backend.random_uniform_like(P, minval=-5.0, maxval=-3)  # [[-3.8, -4.4], [-4.8, -4.9]]

Parameters:

Name Type Description Default
tensor Tensor

The tensor whose shape will be copied.

required
minval float

The minimum bound of the uniform distribution.

0.0
maxval float

The maximum bound of the uniform distribution.

1.0
dtype Union[None, str]

The data type to be used when generating the resulting tensor. This should be one of the floating point types.

'float32'

Returns:

Type Description
Tensor

A tensor of random uniform noise with the same shape as tensor.

Raises:

Type Description
ValueError

If tensor is an unacceptable data type.

Source code in fastestimator/fastestimator/backend/_random_uniform_like.py
def random_uniform_like(tensor: Tensor, minval: float = 0.0, maxval: float = 1.0,
                        dtype: Union[None, str] = 'float32') -> Tensor:
    """Generate noise shaped like `tensor` from a random normal distribution with a given `mean` and `std`.

    This method can be used with Numpy data:
    ```python
    n = np.array([[0,1],[2,3]])
    b = fe.backend.random_uniform_like(n)  # [[0.62, 0.49], [0.88, 0.37]]
    b = fe.backend.random_uniform_like(n, minval=-5.0, maxval=-3)  # [[-3.8, -4.4], [-4.8, -4.9]]
    ```

    This method can be used with TensorFlow tensors:
    ```python
    t = tf.constant([[0,1],[2,3]])
    b = fe.backend.random_uniform_like(t)  # [[0.62, 0.49], [0.88, 0.37]]
    b = fe.backend.random_uniform_like(t, minval=-5.0, maxval=-3)  # [[-3.8, -4.4], [-4.8, -4.9]]
    ```

    This method can be used with PyTorch tensors:
    ```python
    p = torch.tensor([[0,1],[2,3]])
    b = fe.backend.random_uniform_like(p)  # [[0.62, 0.49], [0.88, 0.37]]
    b = fe.backend.random_uniform_like(P, minval=-5.0, maxval=-3)  # [[-3.8, -4.4], [-4.8, -4.9]]
    ```

    Args:
        tensor: The tensor whose shape will be copied.
        minval: The minimum bound of the uniform distribution.
        maxval: The maximum bound of the uniform distribution.
        dtype: The data type to be used when generating the resulting tensor. This should be one of the floating point
            types.

    Returns:
        A tensor of random uniform noise with the same shape as `tensor`.

    Raises:
        ValueError: If `tensor` is an unacceptable data type.
    """
    if tf.is_tensor(tensor):
        return tf.random.uniform(shape=tensor.shape, minval=minval, maxval=maxval, dtype=dtype)
    elif isinstance(tensor, torch.Tensor):
        return torch.rand_like(tensor, dtype=STRING_TO_TORCH_DTYPE[dtype]) * (maxval - minval) + minval
    elif isinstance(tensor, np.ndarray):
        return np.random.uniform(low=minval, high=maxval, size=tensor.shape).astype(dtype=dtype)
    else:
        raise ValueError("Unrecognized tensor type {}".format(type(tensor)))