📜  Pytorch 中的张量(1)

📅  最后修改于: 2023-12-03 14:46:48.473000             🧑  作者: Mango

Pytorch 中的张量

Pytorch 是一个基于 Torch 的 Python 深度学习库,它提供了一个高度优化的张量(Tensor)库,可以支持不同的硬件设备并快速进行复杂的神经网络计算。张量是 Pytorch 中最基础的数据结构,如果你想在 Pytorch 中使用深度学习,你需要与张量打交道。在本文中,我们将介绍 Pytorch 中的张量,涉及到的内容包括:

  • 张量的创建
  • 张量的属性和操作
  • 张量的数据类型和形状
  • 将张量放到 GPU 上运算

让我们开始吧。

张量的创建

在 Pytorch 中,我们可以使用 torch.Tensor() 来创建一个张量。备注:因为torch.Tensor是一个类,所以需要实例化,即需要加括号。

import torch

a = torch.Tensor([1, 2, 3])
print(a)  # tensor([1., 2., 3.])

我们可以看到,通过列表的形式传递数据,我们可以创建一个一维的张量。张量还可以是二维、三维或者更高维度的,我们只需传递不同维度的列表。

b = torch.Tensor([[1, 2], [3, 4]])
print(b)  #tensor([[1., 2.],
          #        [3., 4.]])

除了 torch.Tensor(),我们还可以使用其他的函数来创建张量,比如说 torch.zeros()。下面是一个创建一个 2x2 的全 0 张量的例子。

c = torch.zeros(2, 2)
print(c)  # tensor([[0., 0.],
           #         [0., 0.]])

我们可以使用 torch.ones() 来创建一个全 1 张量。以下是更多的张量创建函数:

torch.arange(1, 10)                 # tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
torch.linspace(start=0.1, end=1, steps=10)  # tensor([0.1000, 0.2000, 0.3000, 0.4000, 0.5000, 0.6000, 0.7000, 0.8000, 0.9000, 1.0000])
torch.randn(2, 2)  # tensor([[a,b],[c,d]])  # 创建一个 2x2 的张量,元素都随机采样自标准正态分布
torch.randperm(4)  # tensor([2, 1, 0, 3])
张量的属性和操作

每个张量都有重要的属性,这些属性包括维度(dim)、形状(shape)、数据类型(type)、张量中元素的总数(numel)等。

a = torch.ones(3, 2)
print(a)
print(a.dim())      # 输出 2
print(a.shape)      # 输出 torch.Size([3, 2])
print(a.numel())    # 输出 6

我们可以通过访问张量中元素的下标来操作单个或多个特定的元素。在下面的例子中,我们将使用索引 0 和 1 来访问张量 a 中第一行和第二行的元素">

a = torch.Tensor([[1, 2], [3, 4], [5, 6]])
print(a[0][1])   # 输出 2
print(a[1][1])   # 输出 4

我们还可以使用各种张量运算来操作张量。例如,以下是一个张量加法的例子:

a = torch.Tensor([1, 2, 3])
b = torch.Tensor([4, 5, 6])
print(a + b)    # tensor([5., 7., 9.])

还有一些常用的张量运算:

torch.add(a, b)      # tensor([5., 7., 9.])
torch.sub(a, b)      # tensor([-3., -3., -3.])
torch.mul(a, b)      # tensor([ 4., 10., 18.])
torch.div(a, b)      # tensor([0.2500, 0.4000, 0.5000])
torch.dot(a, b)      # tensor(32.)
张量的数据类型和形状

Pytorch 支持许多数据类型,包括浮点型、整型等等。以下是一些常见的数据类型:

  • torch.FloatTensor:用于存储浮点型张量
  • torch.LongTensor:用于存储整型张量
  • torch.DoubleTensor:用于存储双精度张量

我们可以将一个数据类型转换为另一个数据类型。

a = torch.FloatTensor([1, 2, 3])
print(a.type())       # 输出 "torch.FloatTensor"
b = a.int()
print(b.type())       # 输出 "torch.IntTensor"

张量的形状(Shape)表示它的大小,也就是每个维度上的长度。我们可以使用 torch.Size() 函数来获取张量的形状。

a = torch.Tensor([[1, 2], [3, 4], [5, 6]])
print(a.shape)   # 输出 torch.Size([3, 2])

我们可以使用 view() 方法来更改张量的形状。

a = torch.Tensor([[1, 2], [3, 4], [5, 6]])
b = a.view(2, 3)
print(b)
将张量放到 GPU 上运算

如果你拥有一张显卡,你可以将张量放入 GPU 内存中以加速运算。在 Pytorch 中,我们可以使用 .to() 方法来将张量转换到 GPU 上,如下所示:

# 判断是否有可用的 GPU
if torch.cuda.is_available():
    device = torch.device("cuda")          # GPU 环境中
else:
    device = torch.device("cpu")           # 只能使用 CPU

a = torch.Tensor([1, 2, 3])   
a = a.to(device)

使用 GPU 后,你就可以对张量进行更快的运算了。

本文介绍了 Pytorch 中的张量,包括张量的创建、属性和操作、数据类型和形状以及如何将张量放到 GPU 上运算。在你的深度学习之旅中,正确使用张量是一个非常重要的技能,希望这篇文章可以对你有所帮助。