Introduction
This tutorial will show you how to create Tensors with random values in PyTorch by using torch.rand() and torch.rand_like() functions. In deep learning, creating tensors there initialized with random numbers is a very common operation. We will explain these functions with the help of examples for better understanding.
PyTorch Random Tensors with torch.rand()
torch.rand function is used to create a tensor with the random values from the uniform distribution that lies between the interval [0,1) i.e. greater than or equal to 0 and less than 1.
Let us understand this better with the examples, but before that let us import the PyTorch library.
In [0]:
import torch;
Example – 1: Creating 2 Dimensional Random Tensor with torch.rand()
In the first example, we are generating a tensor of size 3×3 with random values with torch.rand function. There are three different syntaxes to do this –
Method – 1:
In this example, we just pass the size as 3,3 to torch.rand() as shown below.
In [1]:
tensor = torch.rand(3,3) tensor
Out[1]:
tensor([[0.6389, 0.8245, 0.2545], [0.5153, 0.2170, 0.6151], [0.3091, 0.7528, 0.5183]])
Method – 2:
In this method, we can pass the size as a list [3,3] to torch.rand() as shown below.
In [2]:
tensor = torch.rand(size = [3,3]) tensor
Out[2]:
tensor([[0.6389, 0.8245, 0.2545], [0.5153, 0.2170, 0.6151], [0.3091, 0.7528, 0.5183]])
Method – 3:
In this method, we can pass the size as a tuple (3,3) to torch.rand() as shown below.
In [3]:
tensor = torch.rand(size = (3,3)) tensor
Out[3]:
tensor([[0.6389, 0.8245, 0.2545], [0.5153, 0.2170, 0.6151], [0.3091, 0.7528, 0.5183]])
Example – 2: Creating 1 Dimensional Random Tensor
In this example, we are creating a 1-D random tensor of 10 elements.
In [4]:
tensor = torch.rand(10); tensor
Out[4]:
tensor([0.8266, 0.7850, 0.4197, 0.9229, 0.7172, 0.8324, 0.3692, 0.4916, 0.7819, 0.7687])
Example – 3: Creating 3 Dimensional Random Tensor
In the below example, we are creating 3-D PyTorch tensor of size 2x3x3.
In [5]:
tensor = torch.rand(size=(2,3,3)) tensor
Out[5]:
tensor([[[0.6133, 0.9458, 0.9013], [0.4031, 0.5596, 0.0875], [0.5414, 0.9022, 0.8020]], [[0.2309, 0.2696, 0.6551], [0.7222, 0.2852, 0.8607], [0.8311, 0.4471, 0.2992]]])
Example – 4: Using dtype parameter with torch.rand
tensor = torch.rand(size=(3,3), dtype=torch.float32) tensor
tensor([[0.3449, 0.0083, 0.6991], [0.4702, 0.8682, 0.2594], [0.1540, 0.4070, 0.5919]])
Issue with Int data type with torch.rand() :
tensor = torch.rand(size=(3,3), dtype=torch.int32); tensor
--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) <ipython-input-28-9554a5ee2190> in <module>() ----> 1 tensor = torch.rand(size=(3,3), dtype=torch.int32); 2 tensor RuntimeError: "check_uniform_bounds" not implemented for 'Int'
Example – 5: Using Seed Value with torch.rand
Whenever you use torch.rand() function it will generate different values each time randomly. However, if you want to make sure that every time you call this function it generates the same random values then we have to pass the seed value as explained below.
We first create a generator object gen and initialize it with a seed value with manual_seed(). And then we use this generator object inside torch.rand as shown below. Now, whenever we use this block of code it will generate the tensor with the same values.
In [8]:
gen = torch.Generator() gen.manual_seed(2947587447) tensor = torch.rand(size=(4,3), generator = gen) tensor
Out[8]:
tensor([[0.0371, 0.6312, 0.3432], [0.3925, 0.3106, 0.4346], [0.1148, 0.1085, 0.2297], [0.7899, 0.3889, 0.0603]])
PyTorch Random Tensors with torch.rand_like()
Example – 1: Creating 2 Dimensional Random Tensor with torch.rand_like()
First, we shall create a tensor with zero values that will be used for creating the random tensor of the same size. Next, we pass the name of this tensor to torch.rand_like function.
In [9]:
reference_tensor = torch.zeros(size=(3,4)) reference_tensor
Out[9]:
tensor([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]])
tensor = torch.rand_like(reference_tensor) tensor
Out[10]:
tensor([[[0.8383, 0.9491, 0.6800, 0.6901], [0.4085, 0.5711, 0.7195, 0.0400], [0.7486, 0.7667, 0.2196, 0.8198]], [[0.7664, 0.1315, 0.7272, 0.4294], [0.7604, 0.1315, 0.7219, 0.7277], [0.5066, 0.0683, 0.4788, 0.6700]]])
Example – 2: Creating 3 Dimensional Random Tensor with torch.rand_like()
Here we create a 3-D zero tensor and then use it as a reference to create random tensor.
In [11]:
reference_tensor = torch.zeros(size=(2,3,4)) reference_tensor
tensor([[[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]], [[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]])
tensor = torch.rand_like(reference_tensor) tensor
Out[12]:
tensor([[[0.1704, 0.4320, 0.6740, 0.4405], [0.5392, 0.0576, 0.6135, 0.2433], [0.2174, 0.9259, 0.7687, 0.5202]], [[0.8903, 0.2329, 0.1755, 0.6491], [0.5983, 0.3904, 0.4308, 0.4082], [0.6989, 0.9511, 0.8717, 0.9099]]])
- Reference – PyTorch Documentation