在 PyTorch 中创建张量


什么是 Pytorch?

Pytorch 是一个基于 Python 的机器学习框架,主要用于科学计算和构建深度学习模型。

张量是机器学习和数据科学中一个流行的概念。张量是矩阵和向量的广义术语。简单来说,张量可以是任何东西——一个 n 维数组、一个向量或一个矩阵。在本文中,我们将探讨在 Pytorch 中创建张量的多种方法。

创建张量的方法

张量可以通过多种方法创建。下面列出了一些重要的方法。

  • 使用 ones 创建张量

  • 使用 zeros 创建张量

  • 使用 arange 创建张量

  • 使用 rand() 创建张量

  • 使用 full() 创建张量

  • 使用 linspace 创建张量

  • 使用 randint() 创建张量

  • 使用 eye() 方法创建张量

  • 使用 tensor 方法创建张量

  • 使用 complex 方法创建张量

作为第一步,在开始使用不同的创建张量的方法之前,我们必须首先导入 torch。

语法

#importing torch
import torch

方法 1:使用 ones() 创建张量

使用 ones() 函数,创建的张量的所有元素都设置为 1。

让我们在 Python 编程中编写一段代码来使用 ones() 函数创建张量。

示例

#creating a tensor using ones()
tensor_using_ones = torch.ones(4,4,5)
#prints the created tensor
print(tensor_using_ones)

输出

从下面的输出中我们可以看到,新创建的张量在形状 (4,4,5) 中的所有条目都设置为“1”。

tensor([[[1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.]],
   
      [[1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.]],
   
      [[1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.]],
   
      [[1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.],
      [1., 1., 1., 1., 1.]]])       

方法 2:使用 zeros() 创建张量

我们使用 zeros() 函数来创建张量,其所有元素都设置为 0。使用此函数,值可以作为列表、元组或空值传递。张量可以通过这些方式中的任何一种创建。

使用 zeros() 函数,创建的张量所有元素都设置为 0。

示例

#creating a tensor using zeros()
tensor_using_zeros = torch.zeros(4,4,5)
#prints the created tensor
print(tensor_using_zeros)

输出

从下面的输出中我们可以看到,新创建的张量在形状 (4,4,5) 中的所有条目都设置为“0”。

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., 0.],
      [0., 0., 0., 0., 0.],
      [0., 0., 0., 0., 0.],
      [0., 0., 0., 0., 0.]],
   
      [[0., 0., 0., 0., 0.],
      [0., 0., 0., 0., 0.],
      [0., 0., 0., 0., 0.],
      [0., 0., 0., 0., 0.]],
   
      [[0., 0., 0., 0., 0.],
      [0., 0., 0., 0., 0.],
      [0., 0., 0., 0., 0.],
      [0., 0., 0., 0., 0.]]])            

方法 3:使用 arange() 创建张量 - 示例 1

arange() 函数用于创建一维 (1D) 张量。

语法

arange() 函数具有以下语法。

torch.arange(start,end,step-size)

其中,

start - 包含在内

end - 不包含在指定的形状中

我们在 Python 中编写代码以创建形状规格为 (5,30,2) 的一维张量。

示例

#creating a tensor using arange
tensor_using_arange = torch.arange(5, 30,2)
#prints the created tensor
print(tensor_using_arange)

输出

这里,创建了一个一维张量,其初始元素为 5,结束元素为 29(即 30-1),公差(步长)为“2”。

tensor([ 5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29])

方法 4:使用 arange() 创建张量 - 示例 2

让我们看看在 Pytorch 中创建张量的另一个示例,其中起始值为负数,即 -5,步长为“1”。

我们在 Python 中编写代码以创建形状规格为 (-5,25,1) 的一维张量。

示例

#creating a tensor using arange
tensor_using_arange1 = torch.arange(-5, 25,1)
#prints the created tensor
print(tensor_using_arange1)

输出

这里,创建了一个一维张量,其初始元素为 -5,结束元素为 24(即 25-1),公差(步长)为“1”。

tensor([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])

方法 5:使用 rand() 创建张量

在 Python 中创建张量的另一种常用方法是 rand() 方法。使用 rand() 方法将为指定的形状创建包含随机数的张量。

语法

rand() 方法的语法如下所示 -

torch.rand(shape)

示例

现在,为了理解使用 rand() 方法创建张量,让我们在 Python 编程中编写一段代码。

#creating a tensor using rand()
tensor_using_rand = torch.rand(5, 5)
#prints the created tensor
print(tensor_using_rand)

输出

从下面的输出中我们可以看到,使用 rand() 方法创建了一个 5X5 形状的张量。张量内的元素是均匀分布的随机数。

tensor(
   [[0.2000, 0.6068, 0.3968, 0.6269, 0.8587],
   [0.1754, 0.5050, 0.8569, 0.5139, 0.9026],
   [0.2634, 0.6543, 0.3015, 0.6873, 0.2214],
   [0.9257, 0.6045, 0.4763, 0.5107, 0.7925],
   [0.7465, 0.0279, 0.4937, 0.0989, 0.8806]])

方法 6:使用 full() 创建张量

当希望张量中的元素为相同的数字时,可以使用张量中的 full() 方法。

语法

full() 方法的语法如下。

torch.full(size, fill_value, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

其中,

fill_value - 是我们希望在张量中使用的值(相同的数字)。

假设,如果我们想创建一个所有元素都为相同数字(4)的张量。我们可以按照下面所示在 Python 编程中编写代码。fill_value 指定为 4。该值将是张量中的公共元素。

示例

#creating a tensor using full method
tensor1 = torch.full((5,5,4)
#prints the created tensor
print(tensor1)

输出

对于上面的代码,我们给出一个 5X5 矩阵的张量,其中所有元素都为 4。

tensor([[4, 4, 4, 4, 4],
      [4, 4, 4, 4, 4],
      [4, 4, 4, 4, 4],
      [4, 4, 4, 4, 4],
      [4, 4, 4, 4, 4]])

方法 7:使用 linspace 创建张量

语法

Linspace() 方法具有以下语法。

linspace (start, stop, num, endpoint=True, retstep=False, dtype=None, axis=0)

其中,

low - 起始元素(包含在内)

high- 结束元素(包含在内)

num- 要在张量中生成的元素数量

示例

我们使用 Linspace() 方法创建一维 (1D) 张量。例如,我们在此处指定的形状为 (2,20,4)。在我们的示例中,2 是起始元素,20 是结束元素,4 是一维张量中存在的元素数量。

#creating a tensor using linspace
tensor_using_linspace = torch.linspace(2, 20, 4)
#prints the created tensor
print(tensor_using_linspace)

输出

我们可以看到,上面的代码产生了下面的输出,其中创建了一个包含 4 个元素的一维张量。

tensor([ 2.,  8., 14., 20.])

方法 8:使用 randint() 创建张量

randint() 方法创建一个张量,其中随机整数根据指定的形状生成。

语法

torch.randint(low,high,shape)

其中,

low - 起始元素(包含在内)

high- 结束元素(不包含在内)

shape - 张量的形状

示例

我们使用 randint() 方法编写 Python 代码,如下所示。

#creating a tensor using randint
tensor_using_randint = torch.randint(10,100, (2,2))
#prints the created tensor
print(tensor_using_randint)

输出

在下面的输出中,我们看到一个张量,其中随机元素在形状 (10,100,(5,5)) 之间生成。在这里,我们得到一个张量,其中随机元素在 10 和 99 之间,形状为 5X5 矩阵。

tensor([[71, 32, 56, 34, 21],
      [37, 71, 98, 63, 40],
      [41, 45, 27, 41, 50],
      [51, 42, 43, 71, 14],
      [87, 52, 77, 88, 85]])

方法 9:使用 eye() 创建张量

当我们想要创建一个二维张量,其中对角线上的元素为 1,其余元素为零时,eye() 方法很有用。

语法

torch.eye (shape)

现在,我们使用 eye() 方法编写 Python 代码。

示例 -1

#creating a tensor using eye
tensor1_using_eye = torch.eye(4, 4)
#prints the created tensor
print(tensor1_using_eye)

输出

我们现在使用 eye() 方法创建了一个 2D 4X4 张量。

tensor([[1., 0., 0., 0.],
      [0., 1., 0., 0.],
      [0., 0., 1., 0.],
      [0., 0., 0., 1.]])

让我们看看使用 eye 函数创建张量的另一个示例。

示例 -2

#creating a tensor using eye
tensor2_using_eye = torch.eye(3)
#prints the created tensor
print(tensor2_using_eye)

输出

我们现在使用 eye() 方法创建了一个 2D 3X3 张量,如下面的输出所示。

tensor([[1., 0., 0.],
      [0., 1., 0.],
      [0., 0., 1.]])

方法 10:使用 Complex() 方法创建张量

complex() 方法是我们将要介绍的最后一种方法。它用于创建复数张量,其中创建的张量将同时具有虚部和实部。

语法

complex() 方法具有以下语法。

torch.complex(real part, imaginary part)

示例

complex() 方法的代码如下所示。

real_tensor = torch.rand(4,5)
print(real_tensor)
imaginary_tensor = torch.rand(4, 5)
print(imaginary_tensor)
tensor_using_complex = torch.complex(real_tensor, imaginary_tensor)
#prints created tensor
print(tensor_using_complex )

输出

因此,我们创建了一个复数张量,其虚部和实部形状为 4X5。

Tensor([[0.8284, 0.7833, 0.4952, 0.7634, 0.9098],
      [0.6373, 0.3428, 0.0352, 0.6095, 0.8066],
      [0.7292, 0.0703, 0.3846, 0.6653, 0.1924],
      [0.2920, 0.2676, 0.4669, 0.2841, 0.5974]])
tensor([[0.5236, 0.9037, 0.7622, 0.7044, 0.3362],
      [0.8543, 0.6088, 0.4882, 0.0563, 0.9318],
      [0.7075, 0.1176, 0.6272, 0.3318, 0.3751],
      [0.6317, 0.1482, 0.3772, 0.6941, 0.9126]])
tensor([[0.8284+0.5236j, 0.7833+0.9037j, 0.4952+0.7622j, 0.7634+0.7044j, 0.9098+0.3362j],
      [0.6373+0.8543j, 0.3428+0.6088j, 0.0352+0.4882j, 0.6095+0.0563j, 0.8066+0.9318j],
      [0.7292+0.7075j, 0.0703+0.1176j, 0.3846+0.6272j, 0.6653+0.3318j, 0.1924+0.3751j],
      [0.2920+0.6317j, 0.2676+0.1482j, 0.4669+0.3772j, 0.2841+0.6941j, 0.5974+0.9126j]])     

结论

通过本文,我们学习了在 Pytorch 中创建张量的多种方法。我们建议您也查看我们的文章。

更新于:2023 年 5 月 2 日

299 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告