本文概述
必须了解使用PyTorch所需的所有基本概念。 PyTorch完全基于张量。张量具有要执行的操作。除此之外, 执行任务还需要其他许多概念。
现在, 逐一理解所有概念, 以深入了解PyTorch。
矩阵或张量
张量是Pytorch的关键组件。可以说PyTorch完全基于张量。用数学术语来说, 数字的矩形阵列称为度量。在Numpy库中, 这些指标称为ndaaray。在PyTorch中, 它被称为Tensor。张量是n维数据容器。例如, 在PyTorch中, 1d-Tensor是一个向量, 2d-Tensor是一个度量, 3d-Tensor是一个立方体, 而4d-Tensor是一个立方体向量。
上面的矩阵表示具有三行两列的2D张量。
有三种创建Tensor的方法。每个人都有不同的方式来创建张量。张量创建为:
- 创建PyTorch张量数组
- 创建一个全张量和随机数的张量
- 从numpy数组创建Tensor
让我们看看如何创建张量
将PyTorch张量创建为数组
在这种情况下, 你必须首先定义数组, 然后将该数组在焊炬的Tensor方法中作为参数传递。
例如
import torch
arr = [[3, 4], [8, 5]]
pyTensor = torch.Tensor(arr)
print(pyTensor)
输出
tensor ([[3., 4.], [8., 5.]])
用随机数和全部创建一个张量
要创建一个随机数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]])
从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)
输出
[[1. 1.] [1. 1.]]
张量运算
张量类似于数组, 因此我们在数组上执行的所有操作也可以适用于张量。
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.])
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.]])
3)均值和标准差
我们可以针对一维或多维计算Tensor的标准偏差。在我们的数学计算中, 我们必须首先计算平均值, 然后对具有平均值的给定数据应用以下公式。
但是在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)
变量和梯度
软件包的中心类是autograd.variable。它的主要任务是包装张量。它支持几乎所有在其上定义的操作。你可以调用.backword()并仅在完成计算后才计算所有梯度。
通过.data属性, 你可以访问行Tensor, 而此变量的梯度将累积到.grad中。
在深度学习中, 梯度计算是关键。变量用于计算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中计算梯度。
例子
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.])
评论前必须登录!
注册