《动手学深度学习pytorch版》(李沐)课程笔记--数据操作及预处理

一.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一定要学一学

你可能感兴趣的:(动手学深度学习(李沐授),深度学习,pytorch,人工智能)