📅  最后修改于: 2023-12-03 14:46:48.473000             🧑  作者: Mango
Pytorch 是一个基于 Torch 的 Python 深度学习库,它提供了一个高度优化的张量(Tensor)库,可以支持不同的硬件设备并快速进行复杂的神经网络计算。张量是 Pytorch 中最基础的数据结构,如果你想在 Pytorch 中使用深度学习,你需要与张量打交道。在本文中,我们将介绍 Pytorch 中的张量,涉及到的内容包括:
让我们开始吧。
在 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 内存中以加速运算。在 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 上运算。在你的深度学习之旅中,正确使用张量是一个非常重要的技能,希望这篇文章可以对你有所帮助。