易学好用的 Pytorch — rank、axis 和 shape

270 阅读2分钟

这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战

这是一个关于 PyTorch 的分享,希望带来一个不同视角来看 PyTroch 来看深度学习。今天我们看重效率,希望付出努力快速看到成效,不然就难以坚持。不要想要沿着某一个方向,对于自己有所突破,就需要我们不断克服学习没有及时反馈的无奈,经常鼓励自己保持良好习惯,不放弃,持之以恒学习,日久相信一定会有所突破。

tensor

Tensor 可以一种语言,或者表达方式,我们将事物根据不同任务抽象为 tensor 来表达传递给计算机。tensor 是深度学习,神经网络的基础。所以在学习如何使用 PyTorch 来实现一些网络结构前,一定要熟练掌握 tensor,只有把基础打好才能更近一层。

rank

首先说一说 tensor 的 Rank,其实可以这样简单理解 Rank,Rank 大小表示我们需要几个索引来在 tensor 确定到一个数值。

a = [1,2,3,4,5]
a[2]#3

对于一个向量我们只需要一个索引便可以从数组获取想要的元素, rank 是 1。

b = torch.arange(9).reshape(3,3)
b

对于二维 tensor 我们需要 2 个索引才能够定位到我们想要的元素所以 rank 就是 2

tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
b[0][2]#tensor(2)

axis

如果我们的 tensor 是 2 维 tensor 也就是有 2 个轴,tensor 是可以看成一些带有一定结构的数据,axis 将数据排序分为几个维度,也就是我们先然后某一个 axis 排序数据后,再去按另一个 axis 来排序。每一个 axis 都有一个长度,例如 b 就是 axis=0 维度上是 3 而且在 axis=1 维度上长度也是 3。axis 长度也就是表示其在维度上能够容纳元素的个数。

shape 就可以了解到每一个 tesnor 的 axis 的长度(length)情况,有了 shape 我们就知道有几个 axis 每一个 axis 的长度又是多少。

rint(b[0])
print(b[1])
print(b[2])

在 axis=0 通过索引可获取到一个数组。

tensor([0, 1, 2])
tensor([3, 4, 5]) 
tensor([6, 7, 8])

继续在 axis=1 通过索引就可以定位到一个数值。

print(b[0][0])
print(b[1][1])
tensor(0) 
tensor(4)

shape.jpeg

shape

通过 shape 可以看出每一个 axis 维度长度,可以直接调用 tensor 的 shape 来获取 tensor 的各个维度长度。

b.shape#torch.Size([3, 3])

我们调用 b 的 shape 属性返回 torch.Size([3,3]) 这是因为在 pytorch 中 shapesize 是一回事。通常 rank 等于 len(b.shape) 也就是我们数据需要几个维度索引才能表示。

len(b.shape) #2