Pytorch 基础教程 02
Tensor
PyTorch 作为Numpy的代替品,可以使用GPU的强大计算能力
提供最大的灵活性和告诉的深度学习研究平台
这里补充上实验环境调试:第一次使用VS Code可以参考:PyTorch(超详细)部署与激活 举起Python火炬,点亮智慧人生【Windows版】
另外这里可能会遇到一些环境问题:
为了解决这里先点击VS Code右下角环境,在弹出菜单中选择Pytorch环境
开始安装torch library
SUCCESS !!
开始coding
Tensor是 PyTorch 中的核心数据抽象。此交互式笔记本深入介绍了 torch.Tensor 类。
首先,让我们导入 PyTorch 模块。我们还将添加 Python 的数学模块来简化一些示例。
2.1 创建Tensor
创建张量的最简单方法是使用 torch.empty() 调用:
x = torch.empty(3, 4)
print(type(x))
print(x)
结果:
让我们拆分刚刚所做的事情:
- 我们使用 torch 模块附带的众多工厂方法之一创建了一个张量。
- 张量本身是二维的,这个例子有 3 行和 4 列。
- 返回对象的类型是 torch.Tensor ,它是 torch.FloatTensor 的别名;默认的情况下,PyTorch 张量由 32 位浮点数填充。 (下面详细介绍数据类型。)
- 打印张量时,您可能会看到一些看起来随机的值。 torch.empty() 调用为张量分配内存,但不使用任何值对其进行初始化 - 因此您看到的是分配时内存中的内容。
关于张量及其维数和术语的简要说明:
- 有时你会看到称为vector的一维tensor。
- 同样,二维tensor通常称为矩阵。
- 任何超过二维的东西通常都被称为tensor。
通常,你需要使用某个值来初始化张量。常见情况是全零、全一或随机值, torch 模块为所有这些提供工厂方法:
zeros = torch.zeros(2, 3)
print(zeros)
ones = torch.ones(2, 3)
print(ones)
torch.manual_seed(1000)
random = torch.rand(2, 3)
print(random)
2.2 随机Tensors 和 seeding
说到随机张量,您是否注意到紧随其前面的 torch.manual_seed() 调用?使用随机值初始化张量(例如模型的学习权重)很常见,但有时(尤其是在研究环境中)你需要确保结果的可重复性。手动设置随机数生成器的种子是实现此目的的方法。让我们更仔细地看看:
torch.manual_seed(1000)
random1 = torch.rand(2, 3)
print(random1)
random2 = torch.rand(2, 3)
print(random2)
torch.manual_seed(1000)
random3 = torch.rand(2, 3)
print(random3)
random4 = torch.rand(2, 3)
print(random4)
你应该在上面看到的是 random1 和 random3 具有相同的值, random2 和 random4 也是如此。手动设置 RNG 的种子会重置它,因此在大多数设置中,取决于随机数的相同计算应该提供相同的结果。
2.3 Tensor Shapes
通常,当你对两个或多个张量执行操作时,它们需要具有相同的形状 - 即具有相同的维度数以及每个维度中相同的单元数。为此,我们有 torch.*_like() 方法:
x = torch.empty(2, 2, 3)
print(x.shape)
print(x)
empty_like_x = torch.empty_like(x)
print(empty_like_x.shape)
print(empty_like_x)
zeros_like_x = torch.zeros_like(x)
print(zeros_like_x.shape)
print(zeros_like_x)
ones_like_x = torch.ones_like(x)
print(ones_like_x.shape)
print(ones_like_x)
rand_like_x = torch.rand_like(x)
print(rand_like_x.shape)
print(rand_like_x)
上面代码单元中的第一个新内容是在张量上使用 .shape 属性。此属性包含张量每个维度的范围的列表 - 在我们的示例中, x 是形状为 2 x 2 x 3 的三维张量。
下面,我们调用 .empty_like() 、 .zeros_like() 、 .ones_like() 和 .rand_like() 方法。使用 .shape 属性,我们可以验证这些方法中的每一个都返回具有相同维度和范围的张量。
创建将覆盖的张量的最后一种方法是直接从 PyTorch 集合指定其数据:
2.4 Tensor Data Types
有几种方法可以设置张量的数据类型:
a = torch.ones((2, 3), dtype=torch.int16)
print(a)
b = torch.rand((2, 3), dtype=torch.float64) * 20.
print(b)
c = b.to(torch.int32)
print(c)
设置张量基础数据类型的最简单方法是在创建时使用可选参数。在上面单元格的第一行中,我们为张量 a 设置 dtype=torch.int16 。当我们打印 a 时,我们可以看到它充满了 1 而不是 1. Python 的细节提示是这是一个整数类型而不是浮点数。
关于打印 a 需要注意的另一件事是,不像我们将 dtype 保留为默认值(32 位浮点)不同,打印张量还指定其 dtype.
我们可能还发现,我们从将张量的形状指定为一系列整数参数,到将这些参数分组到一个元组中。这并不是绝对必要的 - PyTorch 会将一系列初始的、未标记的整数参数作为张量形状 - 但在添加可选参数时,它可以使您的意图更具可读性。
设置数据类型的另一种方法是使用 .to() 方法。在上面的单元格中,我们以通常的方式创建一个随机浮点张量 b 。接下来,我们通过使用 .to() 方法将 b 转换为 32 位整数来创建 c 。请注意, c 包含与 b 相同的所有值,但被截断为整数。
可用的数据类型包括:
torch.bool
torch.int8
torch.uint8
torch.int16
torch.int32
torch.int64
torch.half
torch.float
torch.double
torch.bfloat