PyTorch基础概念(张量用法详解)

本文概述

  • 矩阵或张量
  • 张量运算
  • 变量和梯度
必须了解使用PyTorch所需的所有基本概念。 PyTorch完全基于张量。张量具有要执行的操作。除此之外, 执行任务还需要其他许多概念。
PyTorch基础概念(张量用法详解)

文章图片
现在, 逐一理解所有概念, 以深入了解PyTorch。
矩阵或张量 张量是Pytorch的关键组件。可以说PyTorch完全基于张量。用数学术语来说, 数字的矩形阵列称为度量。在Numpy库中, 这些指标称为ndaaray。在PyTorch中, 它被称为Tensor。张量是n维数据容器。例如, 在PyTorch中, 1d-Tensor是一个向量, 2d-Tensor是一个度量, 3d-Tensor是一个立方体, 而4d-Tensor是一个立方体向量。
PyTorch基础概念(张量用法详解)

文章图片
上面的矩阵表示具有三行两列的2D张量。
有三种创建Tensor的方法。每个人都有不同的方式来创建张量。张量创建为:
  1. 创建PyTorch张量数组
  2. 创建一个全张量和随机数的张量
  3. 从numpy数组创建Tensor
让我们看看如何创建张量
将PyTorch张量创建为数组
在这种情况下, 你必须首先定义数组, 然后将该数组在焊炬的Tensor方法中作为参数传递。
例如
import torch arr = [[3, 4], [8, 5]] pyTensor = torch.Tensor(arr) print(pyTensor)

输出
tensor ([[3., 4.], [8., 5.]])

PyTorch基础概念(张量用法详解)

文章图片
用随机数和全部创建一个张量
要创建一个随机数Tensor, 你必须使用rand()方法, 并创建一个包含所有Tensor的Tensor, 你必须使用割炬的ones()。为了产生随机数, 将对兰德使用另一种炬管方法, 即, manual_seed具有0个参数。
例如
import torch ones_t = torch.ones((2, 2)) torch.manual_seed(0)//to have same values for random generation rand_t = torch.rand((2, 2)) print(ones_t) print(rand_t)

输出
Tensor ([[1., 1.], [1., 1.]]) tensor ([[0.4963, 0.7682], [0.0885, 0.1320]])

PyTorch基础概念(张量用法详解)

文章图片
从numpy数组创建张量
要从numpy数组创建Tensor, 我们必须创建一个numpy数组。创建完numpy数组后, 我们必须将其作为参数传递给from_numpy()。此方法将numpy数组转换为Tensor。
例如
import torch import numpy as np1 numpy_arr = np1.ones((2, 2)) pyTensor = torch.from_numpy(numpy_arr) np1_arr_from_Tensor = pyTensor.numpy() print(np1_arr_from_Tensor)

【PyTorch基础概念(张量用法详解)】输出
[[1. 1.] [1. 1.]]

PyTorch基础概念(张量用法详解)

文章图片
张量运算 张量类似于数组, 因此我们在数组上执行的所有操作也可以适用于张量。
PyTorch基础概念(张量用法详解)

文章图片
1)调整张量
我们可以使用Tensor的size属性来调整Tensor的大小。我们使用Tensor.view()来调整Tensor的大小。调整张量大小意味着将2 * 2维张量转换为4 * 1或将4 * 4维张量转换为16 * 1, 依此类推。要打印Tensor大小, 我们使用Tensor.size()方法。
让我们看一个调整张量大小的例子。
import torch pyt_Tensor = torch.ones((2, 2)) print(pyt_Tensor.size())# shows the size of this Tensor pyt_Tensor = pyt_Tensor.view(4) # resizing 2x2 Tensor to 4x1 print(pyt_Tensor)

输出
torch.Size ([2, 2]) tensor ([1., 1., 1., 1.])

PyTorch基础概念(张量用法详解)

文章图片
2)数学运算
所有数学运算(例如加法, 减法, 除法和乘法)都可以在Tensor上执行。PyTorch可以进行数学运算。我们使用torch.add(), torch.sub(), torch.mul()和torch.div()在Tensor上执行操作。
让我们看一个如何执行数学运算的示例:
import numpy as np import torch Tensor_a = torch.ones((2, 2)) Tensor_b = torch.ones((2, 2)) result=Tensor_a+Tensor_b result1 = torch.add(Tensor_a, Tensor_b)//another way of addidtion Tensor_a.add_(Tensor_b) // In-place addition print(result) print(result1) print(Tensor_a)

输出
tensor ([[2., 2.], [2., 2.]]) tensor ([[2., 2.], [2., 2.]])

PyTorch基础概念(张量用法详解)

文章图片
3)均值和标准差
我们可以针对一维或多维计算Tensor的标准偏差。在我们的数学计算中, 我们必须首先计算平均值, 然后对具有平均值的给定数据应用以下公式。
PyTorch基础概念(张量用法详解)

文章图片
但是在Tensor中, 我们可以使用Tensor.mean()和Tensor.std()来找到给定Tensor的偏差和均值。
让我们看一个如何执行的例子。
import torch pyTensor = torch.Tensor([1, 2, 3, 4, 5]) mean = pyt_Tensor.mean(dim=0)//if multiple rows then dim = 1 std_dev = pyTensor.std(dim=0)// if multiple rows then dim = 1 print(mean) print(std_dev)

输出
tensor (3.) tensor (1.5811)

PyTorch基础概念(张量用法详解)

文章图片
变量和梯度 软件包的中心类是autograd.variable。它的主要任务是包装张量。它支持几乎所有在其上定义的操作。你可以调用.backword()并仅在完成计算后才计算所有梯度。
通过.data属性, 你可以访问行Tensor, 而此变量的梯度将累积到.grad中。
PyTorch基础概念(张量用法详解)

文章图片
在深度学习中, 梯度计算是关键。变量用于计算PyTorch中的梯度。简而言之, 变量只是具有梯度计算功能的Tensors的包装。
以下是用于管理变量的python代码。
import numpy as np import torch from torch.autograd import Variable pyt_var = Variable(torch.ones((2, 2)), requires_grad = True)

上面的代码与Tensors的行为相同, 因此我们可以以相同的方式应用所有操作。
PyTorch基础概念(张量用法详解)

文章图片
让我们看看如何在PyTorch中计算梯度。
例子
import numpy as np import torch from torch.autograd import Variable // let's consider the following equation // y = 5(x + 1)^2 x = Variable (torch.ones(1), requires_grad = True) y = 5 * (x + 1) ** 2//implementing the equation. y.backward()// calculate gradient print(x.grad)// get the gradient of variable x # differentiating the above mentioned equation // => 5(x + 1)^2 = 10(x + 1) = 10(2) = 20

输出
tensor([20.])

PyTorch基础概念(张量用法详解)

文章图片

    推荐阅读