一.N维数组
N维数组是机器学习和神经网络的主要数据结构,其中:
0维数组即标量;
1维数组即向量;
2维数组即矩阵;
3维数组最简单的即为RGB图片(宽×高×通道);
注:彩色图片的通道数为3(因为有三原色),黑白图片的通道数为1。
4维数组可以理解为n个三维数组放在一起,如RGB图片的批量(批量大小×宽×高×通道)
5维数组如一个视频的批量(批量大小×时间×宽×高×通道)
二.创建数组
创建数组需要3个要素。
1.数组形状,如3×4矩阵
2.每个元素的数据类型,如32位浮点数
3.每个元素的值
三.访问元素
这里建议看李沐老师的课,有具体的例子,很好理解。
四.数据操作
注意:强烈建议跟着李沐老师的课一起敲代码,很多东西多用一用自然就记住了。这里只记录一些注意点。
1.注意是 import torch 而不是 import pytorch
2.张量表示一个数值组成的数组,这个数组可能有多个维度
3.可以用张量的 shape 属性访问张量的形状
4.可以用张量的 numel 函数访问张量中元素的总数
5.如果需要改变张量的形状而不改变其中的元素数量和元素值,可以调用 reshape 函数
6.全0、全1的张量,用torch.zeros((x, y, z))、torch.ones((x,y,z))
7.特定元素值的张量,用torch.tensor()
8.常见的算术运算符(+、-、*、/和**)都可以对张量使用(但是是按照对应元素进行的,*注意与矩阵的乘法区分)
9.张量的合并用torch.cat(),这里需要指出需要合并的张量,以及合并的维度。
如torch.cat((x, y), dim = 0),即将张量x和y按行合并(堆叠)
torch.cat((x, y), dim = 1),即将张量x和y按列合并(并列)
需要注意,dim的范围是[-2,1],其中dim = -2和dim = 0效果一样,dim = -1和dim = 1效果一样
10.对张量中的元素求和(x.sum())会得到一个标量
11.广播机制
如果进行运算的两个张量形状不同,这时就会触发广播机制,这里建议看李沐老师课程中的例子方便理解。
强烈建议跟着老师的课敲遍代码,有些东西我没有深入总结是因为我个人不太需要
五.Q&A部分
1.reshape和view的区别
首先,不建议在使用张量的过程中对张量元素值进行改动,容易出问题。
这里举一个例子谈谈二者的区别。
相信稍微懂点Java的同学对 对象 这个概念都有一定的了解,我们用这个概念进行解释。这里假设 b = torch.arange(12),即系统为b这个对象分配了空间,若 a = b.reshape(2, 3) ,则相当于也让对象a指向了分配给b的空间。所以这种情况下,对a的值进行修改,也会改动b的值。
2.numpy一定要学一学