📜  在 Pytorch 中创建张量

📅  最后修改于: 2022-05-13 01:55:28.043000             🧑  作者: Mango

在 Pytorch 中创建张量

所有的深度学习都是对张量的计算,张量是一个矩阵的推广,可以在超过 2 个维度上建立索引。可以使用 torch.tensor()函数从Python列表创建张量。

tensor() 方法:

要使用 Pytorch 创建张量,我们可以简单地使用 tensor() 方法:

句法:

torch.tensor(Data)

例子:

Python3
import torch
  
V_data = [1, 2, 3, 4]
V = torch.tensor(V_data)
print(V)


Python3
import torch
  
M_data = [[1., 2., 3.], [4, 5, 6]]
M = torch.tensor(M_data)
print(M)


Python3
import torch
  
T_data = [[[1., 2.], [3., 4.]],
          [[5., 6.], [7., 8.]]]
T = torch.tensor(T_data)
print(T)


Python3
import torch
  
x = torch.tensor([[1, 2], [3, 4, 5]])
print(x)


Python3
import torch
  
randint_tensor = torch.randint(5, (3,3))
print(randint_tensor)


Python3
import torch
  
real = torch.rand(2, 2)
print(real)
imag = torch.rand(2, 2)
print(imag)
complex_tensor = torch.complex(real, imag)
print(complex_tensor)


Python3
import torch
  
n = m = 3
eye_tensor = torch.eye(n, m)
print(eye_tensor)


Python3
import torch
  
zeros_tensor = torch.zeros(3,2)
print(zeros_tensor)


Python3
import torch
  
rand_tensor = torch.rand(3, 3)
print(rand_tensor)


Python3
import torch
  
ones_tensor = torch.ones((4,4,4))
print(ones_tensor)


Python3
import torch
  
arange_tensor = torch.arange(2, 20, 2)
print(arange_tensor)


Python3
import torch
  
full_tensor = torch.full((3,2), 3)
print(full_tensor)


Python3
import torch
  
linspace_tensor = torch.linspace(1, 7.75, 4)
print(linspace_tensor)


输出:

tensor([1, 2, 3, 4])

要创建矩阵,我们可以使用:

蟒蛇3

import torch
  
M_data = [[1., 2., 3.], [4, 5, 6]]
M = torch.tensor(M_data)
print(M)

输出:

tensor([[1., 2., 3.],
        [4., 5., 6.]])

要创建 3D 张量,您可以使用以下代码模板:

蟒蛇3

import torch
  
T_data = [[[1., 2.], [3., 4.]],
          [[5., 6.], [7., 8.]]]
T = torch.tensor(T_data)
print(T)

输出:

tensor([[[1., 2.],
         [3., 4.]],

        [[5., 6.],
         [7., 8.]]])

但是,如果我们运行以下代码:



蟒蛇3

import torch
  
x = torch.tensor([[1, 2], [3, 4, 5]])
print(x)

输出:

ValueError: expected sequence of length 2 at dim 1 (got 3)

发生这种情况是因为张量基本上是矩阵,并且它们不能在每个维度上具有不相等数量的元素。

randint() 方法:

randint()方法返回一个张量,其中填充了随机整数,这些整数在给定形状的低(含)和高(不包括)之间均匀生成。形状由用户给出,可以是元组或具有非负成员的列表。 low 的默认值为 0。当只传递一个 int 参数时,默认情况下,low 获取值 0,high 获取传递的值。像 zeros() 一样,形状的空元组或列表会创建一个零维张量。

Syntax: torch.randint(,,)

例子:

蟒蛇3

import torch
  
randint_tensor = torch.randint(5, (3,3))
print(randint_tensor)

输出:

tensor([[3, 2, 3],
        [4, 4, 0],
        [3, 3, 4]])

complex() 方法:

complex()方法接受两个参数( realimag )并返回一个复张量,其实部等于 real 且其虚部等于imag ,其中 real 和imag都是具有相同数据类型和相同形状的张量。

例子:



蟒蛇3

import torch
  
real = torch.rand(2, 2)
print(real)
imag = torch.rand(2, 2)
print(imag)
complex_tensor = torch.complex(real, imag)
print(complex_tensor)

输出:

tensor([[0.7655, 0.7181],
        [0.8479, 0.0369]])
tensor([[0.5604, 0.0012],
        [0.6316, 0.6574]])
tensor([[0.7655+0.5604j, 0.7181+0.0012j],
        [0.8479+0.6316j, 0.0369+0.6574j]])

眼睛()方法:

对于给定的形状 (n,m), eye()方法返回一个二维张量,对角线上为 1,其他地方为 0(恒等矩阵),其中 n 和 m 为非负。行数由 n 给出,列数由 m 给出。 m 的默认值是 n 的值,当只传递 n 时,它会以单位矩阵的形式创建张量。

Syntax: torch.eye()

例子:

蟒蛇3

import torch
  
n = m = 3
eye_tensor = torch.eye(n, m)
print(eye_tensor)

输出:

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

zeros() 方法

当您需要一个所有元素都为零、具有指定形状的张量时,可以使用此方法。形状可以作为元组或列表或两者都不是。如果您传递一个空元组或一个空列表,则 zeros() 方法返回一个形状(维度)为 0 的张量,其唯一元素为 0,其数据类型为浮点数。负数或浮点数不能作为形状传递。

句法:

torch.zero(D1,D2)

Here,
D1: It represents the horizontal dimension of the tensor.
D2: It represents the vertical dimension of the tensor.

例子:

蟒蛇3



import torch
  
zeros_tensor = torch.zeros(3,2)
print(zeros_tensor)

输出:

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

rand() 方法:

rand()方法返回一个张量,该张量填充随机数,这些随机数来自给定形状的区间 0(含)到 1(不含)的均匀分布。形状由用户给出,可以作为元组或列表或两者都不是。类似于 zeros() 和 ones() 传递空元组或列表创建零维的标量张量。像 zeros() 一样,shape 参数只接受一个元组或一个包含非负成员的列表。空元组或列表创建一个零维张量。

rand() 方法可用于在神经网络中设置随机权重和偏差。

Syntax: torch.rand()

蟒蛇3

import torch
  
rand_tensor = torch.rand(3, 3)
print(rand_tensor)

输出:

tensor([[0.6307, 0.7281, 0.0130],
        [0.7359, 0.0241, 0.2845],
        [0.2154, 0.3773, 0.6545]])

ones() 方法:

与 zeros() 类似,ones() 返回一个张量,其中所有元素都为 1,具有指定大小(形状)。

Syntax: torch.tensor()

例子:

蟒蛇3

import torch
  
ones_tensor = torch.ones((4,4,4))
print(ones_tensor)

输出:

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.]]])

arange() 方法:

arange()方法用于获取一维张量(行矩阵),元素从开始(包含)到结束(不包含),具有公共差异步长(start 的默认值为 0,step 的默认值为 1 )。张量的元素可以说是算术级数,给定的步长为公分。所有三个参数 start、end 和 step 都可以是正数、负数或浮点数。



Syntax: torch.arange(,,)

例子:

蟒蛇3

import torch
  
arange_tensor = torch.arange(2, 20, 2)
print(arange_tensor)

输出:

tensor([ 2,  4,  6,  8, 10, 12, 14, 16, 18])

full() 方法:

当我们需要一个由 shape 参数给出的形状的张量时使用full()方法,它的所有元素都等于用户给定的填充值。同样,传递一个空元组或列表会创建一个零维的标量张量。使用 full 时,必须将形状作为元组或列表(可以为空),否则会引发错误。此外,形状列表的成员不能为负数或浮动。

Syntax: torch.full(,)

例子:

蟒蛇3

import torch
  
full_tensor = torch.full((3,2), 3)
print(full_tensor)

输出:

tensor([[3, 3],
        [3, 3],
        [3, 3]])

linspace() 方法:

linspace()方法也返回一维张量(行矩阵),元素从开始(包括)到结束(包括)。然而,与arange()不同,我们在一维张量中传递我们需要的元素数量,而不是传递步长(如上所示)。 Pytorch 自动计算给定开始和结束值的步骤。元素个数只能是非负整数是可以理解的。

Syntax: torch.linspace( , , )

例子:

蟒蛇3

import torch
  
linspace_tensor = torch.linspace(1, 7.75, 4)
print(linspace_tensor)

输出:

tensor([ 1.0000,  3.2500,  5.5000,  7.7500])

arange()不同,在linspace() 中,我们可以有一个大于 end 的开始,因为公差是自动计算的。

Tensor([[0.6307, 0.7281, 0.0130],
        [0.7359, 0.0241, 0.2845],
        [0.2154, 0.3773, 0.6545]])

这就是我们如何在 PyTorch 中创建张量。