讨论5种基本和最常用的张量运算
深度学习使我们能够执行非常复杂的任务。为了有效地执行任务,我们需要一个灵活的工具。由于其简单性,Pytorch为我们提供了此选项。它使用GPU(图形处理单元)提供加速的操作。Pytorch是一个高性能的库,因此它得到了普及。下面的notebook包含一些基本功能,这些功能对于执行张量运算非常有用。这些运算用于多维张量和算术运算。通用运算——逆运算创建运算——复数算术运算——转置改变运算——添加减少运算——Amax我们将讨论这5个基本功能的示例并观察错误。在开始之前,让我们安装并导入PyTorch# Windows
# !pip install numpy torch==1.7.0+cpu torchvision==0.8.1+cpu torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
# Import torch and other required modules
import torch
1. 通用运算——逆运算
我们将使用的第一个函数是“反函数”。a = torch.randn(2,3,3)
print(a)
torch.inverse(a)
上面的“ randn”函数创建了一个3X3方阵,最外面具有2个行。然后,“逆”函数取矩阵中各个元素的逆a = torch.rand(4,4)
print(a)
torch.inverse(a)
上面是一个4X4方阵,其中每个元素都使用反函数进行反算。a = torch.rand(4,3)
print(a)
torch.inverse(a)
RuntimeError: A must be batches of square matrices, but they are 3 by 4 matrices
上面给出的第三个示例抛出错误。“逆”函数给出矩阵各个元素的逆。该错误归因于矩阵不是正方形的事实。通过更改尺寸,可以获得正确的结果。逆函数对于在Pytorch神经网络上执行逆函数非常有用。
2. 创建运算——复数
让我们使用函数通过创建矢量或矩阵来初始化对张量数据的处理。在这里,我们将使用复数的功能。为了获得最终的complex64,我们需要输入float32类型。real = torch.tensor([2,1], dtype=torch.float32)
imag = torch.tensor([2,3], dtype=torch.float32)
a= torch.complex(real, imag)
a.dtype
在下面,我们使用rand函数创建了名为“ real”和“ imag”的张量。使用“复数”函数,我们将两个张量结合在一起,并形成了具有实数和虚数的单个方程real = torch.rand(2,3)
imag = torch.rand(1,3)
print(real)
print(imag)
x = torch.complex(real, imag,)
print(x)
在下面的示例中,它不是尝试使用两个值“ real”和“ imag”数据创建一个复数张量,而是尝试创建一个复数张量。我们可能会因为缺少单个方括号而看到上述错误,而该方括号会给我们所需的结果。real = torch.tensor(2., 4)
imag = torch.tensor(7., 3)
x = torch.complex(real, imag,)
x
TypeError: tensor() takes 1 positional argument but 2 were given
我们可以使用上述函数来创建由实数和虚数数据组成的复数张量。
3. 算术运算——转置
在这里,我们将使用转置功能来处理张量数据,从而使我们的操作变得容易。a = torch.rand(2,3,5)
print(a)
torch.transpose(a,1,2)
从最外面的第1行开始,我们已换位了第一行的所有元素。a = torch.rand(2,5)
print(a)
torch.transpose(a, -1, 0)
这里,在上述情况下,我们给出了要转置的第一维和第二维。TypeError: transpose() received an invalid combination of arguments - got (Tensor), but expected one of: * (Tensor input, name dim0, name dim1) * (Tensor input, int dim0, int dim1)
在张量数据上使用转置功能时,我们还必须传递尺寸,以阐明需要转置哪些尺寸。如果我们使用't'而不是'transpose'函数,那么上面的函数将可以正常工作。当必须转置张量数据的给定维数,同时指定需要转置的“ n”维数时,可以使用“转置”函数。
4. 改变运算——添加
让我们执行一些算术运算——在张量数据上添加一个函数。a = torch.randn(10)
print(a)
torch.add(a,5)
第二个属性(在上述情况下为5)应为整数,必须将其添加到张量数据中(在上述情况下)。结果将是两个的总和。a = torch.rand(5)
b = torch.rand(5)
print(a)
print(b)
torch.add(a,b)
“add”函数计算相同维数的两个张量数据之和,并给出相同维数的结果。a = torch.rand(10)
b = torch.rand(5)
torch.add(a,b)
RuntimeError: The size of tensor a (10) must match the size of tensor b (5) at non-singleton dimension 0
在张量中执行任何算术运算时,我们需要注意输入张量的尺寸彼此匹配。“Add”函数可用于添加任何两个给定的张量,或添加具有给定数字的张量数据。
5. 归约运算——Amax
使用某些归约运算——amax。这些将有助于对张量数据执行统计操作。这里,在下面的示例中,“ amax”函数用于给出每个尺寸中的最大元素,其中“ -1”表示要缩小的尺寸。a = torch.rand(3,2)
print(a)
torch.amax(a, dim = -1)
同样,在以下情况下,“ amax”函数为每个切片提供张量数据中的最大值。a = torch.rand(5)
print(a)
torch.amax(a, dim=-2)
在以下情况下,amax函数的维数在-1到0之间变化。因此,“ dim”属性必须在此范围内。a = torch.tensor([[3,2], [1,2], [4,7],[6,5]])
print(a)
torch.amax(a, dim = 1)
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got -2)
结论
在本文中,我们涵盖了从创建张量数据到执行算术运算所需的函数。