个性化阅读
专注于IT技术分析

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)

输出

[[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基础概念:张量用法详解

赞(0) 打赏
未经允许不得转载:srcmini » PyTorch基础概念:张量用法详解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏