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中不再需要使用变量,因此它们已过时。

更新于:2023年8月10日

220 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告