0 前言
这个系列主要是写给自己看的,奉行拿来主义,对于学习过程中使用到的优质的学习资源和教程会直接把链接贴进来(省的自己看完忘了),也会附上我的一些学习笔记,同时也记录一下我在学习过程中踩过的各种坑(血泪史),希望能帮助到和我一样刚刚入门的人吧。这个系列称为“实践笔记”,是因为其主要面向编程实践而非理论学习。因为我的基础还是比较差,很多东西只是自己的理解,不一定对,供参考。
教程介绍和目录见此文:
季节:【从零开始的机器学习实践笔记】02-优质教程资源收录zhuanlan.zhihu.com![49f61e66bf59365dd3f9a2782903df7f.png](https://i-blog.csdnimg.cn/blog_migrate/e9f8ac95fc2943e3aa03b914e1fddf74.png)
1 学习笔记
第5-7集属于Part 1. Section 2,介绍深度学习中张量(tensor)的基本概念。
- Episode 5 of 33
这一集很简单,就讲了张量是什么这一个事。
在数学的术语中有 scalar(标量)、vector(向量)、matrix(矩阵)这么几个概念,很明显标量是0维的,向量是1维的,而矩阵是2维的,我们对每一种情况都起了一个专门的名字。对应的在计算机科学中的术语是 number(数)、array(数组)、2d-array(二维数组)。
但是在三维和以上之后,就不在专门取名字了,在数学中统一用 tensor(张量)这个术语来称呼,对应计算机的术语就是 nd-array(n维数组)。实际上标量、向量、矩阵都是张量的特殊形式,分别是0维张量、1维张量、2维张量。
但是上面说的维度和我们有时候说的“三维向量”(或者“空间向量”)中的“维度”不是一个概念,为了避免混淆,前者称为张量的 rank(阶),后者是指向量中的元素数量,但n维张量并不限制在某个维度上有多少个元素。
- Episode 6 of 33
这一集讲张量的三个属性——rank、axes、shape。
(1)Rank在前面说了,指张量的维度数量(阶数),虽然是同一个单词但是和矩阵的秩不一样,张量的rank就是指它的维度数量。
(2)Axis指某一维度的长度,也就是这一维度中的元素数量(axes是复数形式)。
比如一个3x4的矩阵,rank为2,第一个维度的axis为3,第二个维度的axis为4。
(3)Shape就是字面意思,各个维度都有多少个元素,刚刚说的3*4就是这个矩阵(二阶张量)的shape。
Python和PyTorch中的操作:
在Python中定义一个矩阵/二维数组/二阶张量dd:
> dd = [
[1,2,3],
[4,5,6],
[7,8,9]
]
如果只用一个索引序号,会索引出沿第一个axis的元素,每个元素都是一个array(按行索引):
> dd[0]
[1, 2, 3]
> dd[1]
[4, 5, 6]
> dd[2]
[7, 8, 9]
如果用两个索引序号,就会索引出某行某列的一个元素,是一个number:
> dd[0][0]
1
> dd[1][0]
4
> dd[0][1]
2
将前面创建的矩阵转换为torch.Tensor
对象,以便后续的操作:
> t = torch.tensor(dd)
> t
可以看到输出为:
tensor([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
查看t的数据类型:
> type(t)
输出为:
torch.Tensor
查看t的shape:
> t.shape
输出为:(PyTorch中shape和size是相同的概念)
torch.Size([3,3])
可以通过“t.shape”这个变量的长度得知张量的阶数:
> len(t.shape)
输出为:
2
然后视频讲了一下张量的reshape,比如把3行3列(3x3)的矩阵reshape成1行9列(1x9),要注意reshape前后元素总量不变:
> t.reshape(1,9)
输出会变成:
tensor([[1, 2, 3, 4, 5, 6, 7, 8, 9]])
- Eposide 7 of 33
这一集讲了一个实例,将图像作为一个tensor输入到CNN中。
(1)CNN的输入tensor
一般CNN的输入是一个4阶张量,分别用一个字母代表每个axis上的长度,那么它的shape为:
[B,C,H,W]
其中 H 和 W 分别代表输入的单张图片的 height(高)和 width(宽)的像素数,比如常见的224x224。
C 代表 color,是指图片的颜色通道数量。对于彩色图片,通常是 C = 3(分别是RGB通道);如果是灰度图片,那么 C = 1。但 C 只在输入层中是这个含义,图片进入CNN传播之后这个axis的意义会变化。
于是可以通过 C、H、W 这三个axis来索引单张图片某一个像素点的像素值,通过 C 索引颜色通道,通过 H 和 W 索引这个颜色通道下第几行第几列的亮度数值。
B 代表 batch size,因为一次向神经网络中会不只输入一张图片,而是同时输入一批图片进行并行计算,因此 B 的数值就代表一次输入了几张图片。
(2)color channel的变化
刚才说color channel在图片在CNN的传播中会发生变化,是因为CNN中使用不同的filter对图像进行卷积操作,每个filter进行卷积之后都会输出一个output channel,称为feature map。于是原来的每一个color channel就被替换成了多个feature map。
假设CNN中使用了 F 个filter,那么经过一次卷积之后tensor的shape会变成:
[B, F*C, H, W]
当然根据卷积操作的不同,输出tensor中的 H 和 W 长度也可能会发生变化。
这一篇也到此结束。
彩蛋:视频最后放了老黄吹AlexNet的一个片段:“开启了GPU深度学习革命,是现代AI鼻祖”。
想想啊,2012年才出现的AlexNet,放在现在早就变成弟弟了,然而我学机械的专业课的时候用的参考资料搞不好都是几十年前的了。。人比人得死,学科比学科得黄啊