卷积神经网络基础
深度学习平台介绍
![](https://i-blog.csdnimg.cn/blog_migrate/fa2a994cd5419fbba6db24a4bbd13970.png)
![](https://i-blog.csdnimg.cn/blog_migrate/999aef5e2b80debf220ce81ec56a11d8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1d6e026dc01e2fe055786d2fe5f6c01c.png)
PyTorch 简介
① PyTorch是一个Python的深度学习库。它最初由Facebook人工智能研究小组开发,而优步的Pyro软件则用于概率编程。
②最初,PyTorch由Hugh Perkins开发,作为基于Torch框架的LusJIT的Python包装器。PyTorch在Python中重新设计和实现Torch,同时为后端代码共享相同的核心C库。
③除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了PyTorch。
④到目前,据统计已有80%的研究采用PyTorch,包括Google
![](https://i-blog.csdnimg.cn/blog_migrate/66b8247791c220e2fd30383da651b6c1.png)
PyTorch资源:
①60分钟快速入门:jianshu.com/p/889dbc684622
②官方教程:https://www.pytorch123.com/
③动手学深度学习:https://zh-v2.d2l.ai/
④Deep learning with pytorch: https://pytorch.org/assets/deeplearning/Deep-Learning-with-PyTorch.pdf
PyTorch基本使用——基本概念:
①张量(Tensor)
是一个物理量,对高维 (维数 ≥ 2) 的物理量进行“量纲分析” 的一种工具。简单的可以理解为:一维数组称为矢量,二维数组为二阶张量,三维数组为三阶张量 …
②计算图
用“结点”(nodes)和“线”(edges)的有向图来描述数学计算的图像。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入的起点/输出的终点,或者是读取/写入持久变量的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)
![](https://i-blog.csdnimg.cn/blog_migrate/deb99f67a725afaec0fcfa54933d84a8.png)
✓使用 tensor 表示数据
✓使用 Dataset、DataLoader 读取样本数据和标签
✓使用变量 (Variable) 存储神经网络权值等参数
✓使用计算图 (computational graph) 来表示计算任务
✓在代码运行过程中同时执行计算图
PyTorch基本使用——简单示例:
![](https://i-blog.csdnimg.cn/blog_migrate/27e1bf400bfeca6662dc875c417f45a8.png)
线性回归:
![](https://i-blog.csdnimg.cn/blog_migrate/47d1c762daf443970e8ece153b65e10c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/26152e3b9232ab1b51be4497d551d99b.png)
卷积神经网络基础
进化史:
![](https://i-blog.csdnimg.cn/blog_migrate/96f16d5cbc6db5197dfc9b98457fcc52.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eed65ba737c7ee569d5bd8bd669feffd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cab841a1c3549f43a6be4004852e8225.png)
![](https://i-blog.csdnimg.cn/blog_migrate/715518e1264ef495537ae9de2a983100.png)
基本概念:
全连接网络:链接权过多,难算难收敛,同时可能进入局部极小值,也容易产生过拟合问题
e.g. 输入为96x96图像,要学习100个特征
局部连接网络:顾名思义,只有一部分权值连接。部分输入和权值卷积。
![](https://i-blog.csdnimg.cn/blog_migrate/da94af40a6ee2a3346a8f76ec31fe983.png)
填充(Padding),也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充。
![](https://i-blog.csdnimg.cn/blog_migrate/123bac522feb602e63d6d3be3b064423.png)
步长:如下图步长为2.
![](https://i-blog.csdnimg.cn/blog_migrate/2f3336b80532966c64f892e78b450a99.png)
多通道卷积:如RGB。
![](https://i-blog.csdnimg.cn/blog_migrate/c1bafee571aad4a83340d239a756612a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/179da28357ff120d429c96f12a9d05af.png)
池化(Pooling):
思想:使用局部统计特征,如均值或最大值。解决特征过多问题
![](https://i-blog.csdnimg.cn/blog_migrate/ed6debe946b07f21989e767faf8d4c91.png)
卷积神经网络结构:
构成:由多个卷积层和下采样层构成,后面可连接全连接网络
卷积层:k个滤波器
下采样层:采用mean或max
后面:连着全连接网络
![](https://i-blog.csdnimg.cn/blog_migrate/3af2e0bf6643681e675dcbc950e4d648.png)
![](https://i-blog.csdnimg.cn/blog_migrate/453142b571ac28aa6909363618eb3b0c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/50e3a616956a09fa2b5e8d7aa40631ed.png)
LeNet-5网络
网络提出:
![](https://i-blog.csdnimg.cn/blog_migrate/4b0fb4bf33cb9df748e46e55891169b2.png)
网络结构:
![](https://i-blog.csdnimg.cn/blog_migrate/c97a8cd6536004627b0195cdb396b3b8.png)
结构详解——C1层:
6个Feature map构成
每个神经元对输入进行5*5卷积
每个神经元对应5*5+1个参数,共6个feature map,28*28个神经元,因此共有(5*5+1)*6*(28*28)=122,304连接
S2层——Pooking层:
![](https://i-blog.csdnimg.cn/blog_migrate/8f200a87d3590d4e3ffb57c76b5834e4.png)
C3层(卷积层):
![](https://i-blog.csdnimg.cn/blog_migrate/6a990ae33e10cdd980e890f0ca2021b7.png)
S4层(与S2层工作相同):
![](https://i-blog.csdnimg.cn/blog_migrate/9948d092a921ac6dbb499a3c2f3dc9a9.png)
C5层:
120个神经元
每个神经元同样对输入进行5*5卷积,与S4全连接
总连接数(5*5*16+1)*120=48120
F6层:
84个神经元
与C5全连接
总连接数(120+1)*84=10164
输出层:
由欧式径向基函数单元构成
每类一个单元
输出RBF单元计算输入向量和参数向量之间的欧式距离
网络结构:
![](https://i-blog.csdnimg.cn/blog_migrate/74f0ed38f423a05bb0e5934b821d3ed1.png)
网络说明
与现在网络的区别
-卷积时不进行填充(padding)
-池化层选用平均池化而非最大池化
-选用Sigmoid或tanh而非ReLU作为非线性环节激活函数
-层数较浅,参数数量小(约为6万)
普遍规律
-随网络深入,宽、高衰减,通道数增加
![](https://i-blog.csdnimg.cn/blog_migrate/68629e6bbc22e19f65914c9044964c89.png)
误差反向传播:
![](https://i-blog.csdnimg.cn/blog_migrate/12f0d6d326f9395a2a1b2f65d858ea7e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bacb1a8979fa06c63589ffcc99f39c5c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d2a01553dffd751b2f66e94d40f34ce8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e28962dbc23801e0340ac0a81a08a35d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f606f75eacb536062d01e5081d5887b9.png)
LeNet5代码实现:
![](https://i-blog.csdnimg.cn/blog_migrate/24f5adf52f1202480810861199ce8da2.png)
nn. Sequential():该函数可以将不同的模块组合成一个新的模块,将各模块按顺序输入即可
nn.AvgPool2d(kernel_size, stride)或MaxPool2d:平均池化或最大池化层,输入参数分别为池化窗口大小和步长。二参数同时可以为整数,否则为元组,类似的还有平均池化nn.AvgPool2d(kernel_size, stride)
nn. Sigmoid():该函数为上一层的输出添加sigmoid激活函数,类似的还有nn.ReLU(),nn.Tanh()等
nn. Conv2d(in_channels,out_channels,kernel_size):卷积层,其三个参数按顺序代表输入通道数、输出通道数、卷积核大小。若卷积核形状为正方形,则卷积核大小可以为int;否则,卷积核大小必须为元组(tuple)如:nn.Conv2d(1, 6, (5, 4))即代表卷积核大小为5×4
除此之外,还有:stride参数:可以规定卷积的步长,与卷积核大小类似,若各方向步长相同则可以为整数,否则应为元组
padding参数:在图像的周围补充0的个数,常常用于控制卷积前后图像的尺寸大小