PyTorch深度学习教程第三章-在 PyTorch 中操作张量(上)



前言

PyTorch 是一个深度学习库。与其他一些深度学习库一样,它对称为张量的数值数组进行操作。简单来说,张量就是多维数组。在处理张量时,一些操作非常常见。在 PyTorch 中,有一些专门用于处理张量的函数。接下来,我们将简要概述 PyTorch 在张量方面提供的功能以及如何使用它们。完成本章后,你将了解:

  • 如何创建和操作 PyTorch 张量
  • PyTorch 的张量语法与 NumPy 类似
  • PyTorch 中常用的函数,可以用来操作张量

一、创建张量

如果你熟悉 NumPy,你应该记得有多种方式来创建数组。在 PyTorch 中,创建张量的方式也是如此。创建一个特定常量矩阵的最简单方法,如下所示:
"1 2 3 4 5 6#
是使用以下方法:

清单 3.1:在 PyTorch 中创建张量

import torch
a = torch.tensor([[1,2,3], [4,5,6]], dtype=torch.int32)
print(a)

输出:

输出 3.1:PyTorch 张量

tensor([[1, 2, 3],
[4, 5, 6]], dtype=torch.int32)

dtype 参数指定张量中值的数据类型,它是可选的。你也可以提供来自 NumPy 数组的值,并将其转换为 PyTorch 张量。通常,你会为了某个特定目的创建张量。例如,如果你想在 -1 和 1 之间均匀分布十个值,可以使用 linspace() 函数:

清单 3.2:在 PyTorch 中创建张量

import torch
a = torch.linspace(-1, 1, 10)
print(a)

输出:

输出 3.2:由 linspace() 生成的张量

tensor([-1.0000, -0.7778, -0.5556, -0.3333, -0.1111, 0.1111, 0.3333, 0.5556,
0.7778, 1.0000])

但是,如果你想要一个随机值的张量(这在测试函数时非常有用),你可以像下面这样创建一个:

清单 3.3:创建一个随机张量

import torch
a = torch.rand(3,4)
print(a)

输出 3.3:一个 3 × 4 形状的随机张量

tensor([[0.4252, 0.1029, 0.9858, 0.7502],
[0.1993, 0.6412, 0.2424, 0.6451],
[0.7878, 0.7615, 0.9170, 0.8534]])

这个生成的张量是 3 × 4 的维度,且每个值均匀分布在 0 到 1 之间。如果你希望这些值是正态分布的,只需将函数改为 randn():

清单 3.4:创建一个正态分布的随机值张量

a = torch.randn(3,4)

如果你想让随机值是整数,例如在 3 到 10 之间,你可以使用 randint() 函数:

清单 3.5:创建一个随机整数张量

import torch
a = torch.randint(3, 10, size=(3,4))
print(a)

这将会生成,例如:

输出 3.4:一个随机整数张量

tensor([[4, 5, 7, 9],
[3, 8, 8, 9],
[4, 7, 7, 6]])

这些值的范围是 3 ≤ x < 10。默认情况下,下限是 0,因此如果你希望值在 0 ≤ x < 10 之间,可以使用:

清单 3.6:创建一个随机整数张量

a = torch.randint(10, size=(3,4))

另一个常用的张量是零张量和所有值相同的张量。要创建一个零张量(例如,维度为 2 × 3 × 4),你可以使用:

清单 3.7:创建一个零张量

import torch
a = torch.zeros(2, 3, 4)
print(a)

输出:

输出 3.5:一个零张量

tensor([[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]],
[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]])

要创建一个所有值都为 5 的张量,你可以使用:

3.8:创建一个填充张量

import torch
a = torch.full((2,3,4), 5)
print(a)

输出:

输出 3.6:填充张量是一个具有相同值的张量

tensor([[[5, 5, 5, 5],
[5, 5, 5, 5],
[5, 5, 5, 5]],
[[5, 5, 5, 5],
[5, 5, 5, 5],
[5, 5, 5, 5]]])

但是如果你希望所有值都为 1,有一个更简单的函数:

3.9:创建一个全为 1 的张量

a = torch.ones(2,3,4)

最后,如果你想要一个单位矩阵,你可以使用 diag() 或 eye() 来获取:

清单 3.10:创建一个单位张量

import torch
a = torch.eye(4)
print(a)

输出:

输出 3.7:一个单位矩阵

tensor([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])

二、检查张量

一旦你有了一个张量,并且想了解更多信息,你可以使用 print() 简单地将其打印到屏幕上。但如果张量太大,检查其形状并显示其维度会更容易:

清单 3.11:检查张量形状

import torch
a = torch.zeros(2, 3, 4)
print(a.shape)
print(a.size())

输出:

输出 3.8:张量形状

torch.Size([2, 3, 4])
torch.Size([2, 3, 4])

张量的形状可以通过 shape 属性或 size() 函数访问。如果你想查看张量有多少维度(例如,2 × 3 × 4 是 3 维,而 3 × 4 是 2 维),你可以读取 ndim 属性:

清单 3.12:查找张量的维数

print(a.ndim)

这将返回“3”。如果你使用 len() 来检查张量,它只会给出第一维的大小,例如:

3.13:查找第一维的大小

import torch
a = torch.zeros(2, 3, 4)
print(len(a))

输出:

输出 3.9:第一维的大小

2

你可能还想了解张量的另一个属性是它的数据类型。通常,在深度学习中使用浮点数,但有时张量应该是整数(例如,在图像中作为像素值)。要检查数据类型,你可以读取 dtype 属性:

清单 3.14:查找张量的数据类型

print(a.dtype)

输出:

输出 3.10:张量的数据类型

torch.float32

如果你想更改数据类型,可以使用新类型重新创建张量:

清单 3.15:更改张量的数据类型是通过创建另一个张量

import torch
a = torch.zeros(2, 3, 4)
b = a.type(torch.int32)
print(a.dtype)
print(b.dtype)

以上输出:

输出 3.11:打印出的张量数据类型

torch.float32
torch.int32

总结

以上是PyTorch深度学习教程第三章-在 PyTorch 中操作张量(上)的内容。
在下一章中,你将学习PyTorch深度学习教程第三章-在 PyTorch 中操作张量(下)的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值