PyTorch中张量和变量的区别
PyTorch是一个用于机器学习、计算机视觉和深度学习的开源Python库。它是一个构建神经网络、进行复杂计算和优化梯度微分的优秀库。
它由Facebook的研究团队(FAIR)开发,由于其动态计算图而广受欢迎,使其能够实时更改图。这在2016年是一个革命性的突破,当时实时工作的模型才刚刚开始流行。
我们将重点关注PyTorch中的两个主要变量:张量和变量。
张量用于定义n维矩阵或多维数组,这些数组又用于数学运算。它们表示许多类型的数组,例如标量、向量和n维数组。它们的功能与NumPy数组或TensorFlow张量类似。PyTorch张量支持自动微分,这对于神经网络中的反向传播至关重要,可以提高准确性并减少错误。它们用于存储和操作PyTorch中的数据。
算法
导入PyTorch。
定义一个列表。
将其转换为张量。
打印张量。
示例
import torch lst=[1,2,3,4,5] tensor=torch.tensor(lst) print(tensor)
输出
tensor([1,2,3,4,5])
变量
它们是PyTorch中的主要数据类型。在更新到PyTorch 0.4.0之前,它们用于包装张量并提供自动微分和跟踪计算图。在弃用之前,变量主要用于部署基于梯度的优化算法。PyTorch更新到0.4.0之后,其大部分功能与张量合并。现在,张量可以在没有变量的情况下执行所有这些功能,因此不再使用它。弃用的主要原因是降低PyTorch的API复杂性,并减少张量和变量之间的混淆。
算法
导入PyTorch
从PyTorch导入Variable。
创建一个简单的列表。
将其转换为张量后,包装变量函数。
打印变量。
示例
import torch from torch.autograd import Variable lst=[1,2,3,4,5] var=Variable(torch.tensor(lst)) print(var)
输出
tensor([1,2,3,4,5])
让我们通过更复杂的例子来了解张量和变量的使用,并亲身体验一下。
使用张量的示例
众所周知,所有程序都是通过计算机的CPU运行的。为了显著加快计算时间,我们可以利用GPU(图形处理器)的强大功能来运行程序。
注意:如果您使用的是Google Colab,请将运行时更改为GPU运行时,否则程序将抛出错误。
算法
从PyTorch导入张量。
创建两个浮点型数据类型的张量。
找到它们的和并打印。
使用cuda()函数执行GPU加速。
打印所有GPU加速结果。
示例
import torch from torch import tensor, cuda #to prevent the program from throwing error device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') t1=tensor(6.) t2=tensor(9.) res=t1+t2 print(res) if cuda.is_available(): t1=t1.cuda() print(t1) t2=t2.cuda() print(t2) res=t1+t2 print(res)
输出
tensor(15.) tensor(6., device='cuda:0') tensor(9., device='cuda:0') tensor(15., device='cuda:0')
使用变量的示例
为了在一个给定函数中执行微分,我们使用grad函数。通过计算输入的计算图,返回一个Python函数作为其导数,这与传统的微分返回代数导数不同。
在这里,我们在对结果变量执行反向传递后返回变量的函数,其中计算梯度,梯度将不会被计算,导致微分返回为'None'
算法
导入PyTorch。
从PyTorch导入Variable。
使用Variable函数包装两个张量。
要查找梯度类型,需要设置'requires_grad'=True
找到两个张量的和。
在网络中反向传递结果以计算梯度。
打印两个张量的梯度值。
示例
import torch from torch.autograd import Variable var1 = Variable(torch.tensor(6.), requires_grad=True) var2 = Variable(torch.tensor(9.), requires_grad=True) result = var1 + var2 print(result) result.backward() print(var1.grad) print(var2.grad)
输出
tensor(15., grad_fn=<AddBackward07>) tensor(1.) tensor(1.)
结论
在PyTorch 0.4.0中弃用Variable函数之前,变量和张量具有不同的功能。变量用于包装多维张量以执行微分。自更新以来,PyTorch中不再需要使用变量,因此它们已过时。