Pytorch入门(二) 第3章 张量 tensor
声明:本文是阅读《Deep Learning With Pytorch》所做的笔记,以方便学习pytorch,详细内容请阅读原书。
首先要将输入的数据转为浮点数 floating- point number,本章主要学习如何用张量来处理浮点数。
目标
- 张量是什么?
- 张量的操作
- 与NumPy中多维数组的互换
- 通过GPU为计算提速
3.1 浮点数 floating numbers
首先必须深刻理解PyTorch如何处理和储存数据,包括 输入 input、中间表示 intermediate representations、输出 output
tensor 也就是将数组扩展到多维,也叫多维数组 multidimensional array。一个tensor的维度就是指一个tensor内标量值的个数。
3.2 Tensors
!!!tensor 的本质
Python列表或数字元组是在内存中单独分配的Python对象的集合,如上图左边所示。而 Pytorch 的 Tensors 或 Numpy 数组(通常)是连续的内存块。 正如上图右边所示,每个元素都是32位(4字节)的浮点数,这意味着存储1,000,000浮点数的一维张量将需要恰好4,000,000的连续字节,以及一些小开销(例如维度和数字类型)。
3.3 Indexing tensors 索引
和python中对list的索引操作一样。
3.4 Named tensors 命名
- 对每个维度进行命名
# input
> weights_named = torch.tensor([0.2126, 0.7152, 0.0722], names=['channels'])
> weights_named.sum('channels')
# output
tensor(1.)
- 给已有的tensor加上名字:refine_names
# input
> img_t = torch.randn(3, 5, 5) # shape [channels, rows, columns]
> img_named = img_t.refine_names(..., 'channels', 'rows', 'columns')
> print("img named:", img_named.shape, img_named.names)
# output
img named: torch.Size([3, 5, 5]) ('channels', 'rows', 'columns')
- 维度对齐: align_as
# input
> weights_aligned = weights_named.align_as(img_named)
> weights_aligned.shape, weights_aligned.names
# output
(torch.Size([3, 1, 1]