Pytorch Tensor和Variable的区别

Pytorch Tensor和Variable的区别

PyTorch是一个开源的Python库,用于机器学习、计算机视觉和深度学习。它是一个出色的库,用于构建神经网络,进行复杂的计算和优化梯度差异。

由Facebook的研究团队(FAIR)开发,由于其动态计算图的特性,它可以实时改变图形。这在2016年的时候是革命性的,当时实时模型刚刚开始流行。

在PyTorch中,有两个主要的变量,即tensor和variable。

Tensor是用于定义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])

Variable

它们是PyTorch中的主要数据类型。在更新到PyTorch 0.4.0之前,它们用于封装张量并提供自动微分和跟踪计算图。变量在被弃用之前主要用于部署基于梯度的优化算法。在PyTorch更新到0.4.0之后,它的大部分功能与张量合并了。现在,张量可以在没有变量的情况下执行所有这些功能,因此不再使用变量。废弃变量的主要原因是为了减少PyTorch API的复杂性,减少张量和变量之间的混淆。

步骤

  • 导入PyTorch

  • 从PyTorch导入变量。

  • 创建一个简单的列表。

  • 将变量函数转换为张量后进行封装。

  • 打印变量。

示例

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])

让我们通过更复杂的例子来了解张量和变量的用法,并亲自看看:

使用Tensor的示例

众所周知,所有的程序都是通过计算机的CPU运行的。为了大大加快计算时间,我们可以利用GPU(图形处理单元)的能力来运行程序。

注意:如果你使用的是Google Colab,请将运行时更改为GPU运行时,否则程序将抛出错误。

步骤

  • 从PyTorch导入张量。

  • 创建两个浮点数据类型的张量。

  • 找到它们的总和并打印出来。

  • 使用cuda()函数进行GPU加速。

  • 打印所有的GPU加速。

示例

import torch
from torch import tensor, cuda
#为了防止程序抛出错误
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')

带有Variable的示例

为了在给定的函数中执行微分,我们使用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之前,变量和张量具有不同的功能。变量被用来包装一个多维张量以进行求导。然而,在最新版本的更新中,PyTorch不再需要使用变量,这使它们过时了。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程