卷积神经网络基础
为什么要“深度学习”
全连接网络问题:链接权过多,算的慢,难收敛,同时可能进入局部极小值,也容易产生过拟合问题。
解决算的慢问题:减少权值连接,每一个节点只连到上一层的少 数神经元,即局部连接网络。
类比人类解决思路:信息分层处理,每一层在上层提取特征的基础上获取进行再处理,得到更高级别的特征。
深度学习平台简介
PyTorch 简介
PyTorch是一个Python的深度学习库。它最初由Facebook人工智能研究小组开发,而优步的Pyro软件则用于概率编程。最初,PyTorch由Hugh Perkins开发,作为基于Torch框架的LusJIT的Python包装器。PyTorch在Python中重新设计和实现Torch,同时为 后端代码共享相同的核心C库。除了Facebook之外,Twitter 、 GMU和 Salesforce 等机构都采用了 PyTorch。到目前,据统计已有80%的研究采用PyTorch,包括Google。
相关资源
①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
基本概念
张量:是一个物理量,对高维 (维数 ≥ 2) 的物理量进行 “量纲分析” 的一种工具。简单的可以理解为:一维数组称为矢量,二维数组为二阶张量,三维数组 为三阶张量 ......
计算图:用“结点”(nodes)和“线”(edges)的有向图来 描述数学计算的图像。“节点” 一般用来表示施加 的数学操作,但也可以表示数据输入的起点/输出的终点,或者是读取/写入持久变量的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线” 可以输运“size可动态调整”的多维数据数组,即 “张量”(tensor)。
基本使用
使用 tensor 表示数据;
使用 Dataset、DataLoader 读取样本数据和标签;
使用变量 (Variable) 存储神经网络权值等参数;
使用计算图 (computational graph) 来表示计算任务;
在代码运行过程中同时执行计算图。
简单示例
构建简单的计算图,每个节点将零个或多个tensor作为输入,产生一个 tensor作为输出。PyTorch中,所见即为所得,tensor的使用和numpy中的多维数组类似:
卷积神经网络基本概念
填充:也就是在矩阵的边界上填充一些值,以 增加矩阵的大小,通常用0或者复制边界像素来进行填充。
池化:使用局部统计特征,如均值或最大值。解决特征过多问题。
LeNet-5网络
网络提出
网络结构
网络说明
与现在网络的区别 :
①卷积时不进行填充(padding)
②池化层选用平均池化而非最大池化
③选用Sigmoid或tanh而非ReLU作为非线性环节激活函数
④层数较浅,参数数量小(约为6万)
普遍规律:随网络深入,宽、高衰减,通道数增加。
可视化
3D Visualization of a Convolutional Neural Network
代码实现
import torch from torch
import nn from d2l
import torch as d2l
class Reshape(torch.nn.Module):
def forward(self, x):
return x.view(-1, 1, 28, 28)
net = torch.nn.Sequential(
%该函数可以将不同的模块组合成一个新的模块,将各模块按顺序输入即可。
Reshape(),
nn.Conv2d(1, 6, kernel_size=5, padding=2),
nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2),
%平均池化或最大池化层,输入参数分别为池化窗口大 小和步长。二参数同时可以为整数,否则为元组 类似的还有平均池化nn.AvgPool2d(kernel_size, stride)。
nn.Conv2d(6, 16, kernel_size=5),
%卷积层,其三个参数按顺序代表输入通道数、输出通 道数、卷积核大小 若卷积核形状为正方形,则卷积核大小可以为int 否则,卷积核大小必须为元组(tuple) 如:nn.Conv2d(1, 6, (5, 4))即代表卷积核大小为5×4。
nn.Sigmoid(),
%该函数为上一层的输出添加sigmoid激活函数 类似的还有nn.ReLU(),nn.Tanh()等。
nn.AvgPool2d(kernel_size=2, stride=2),
nn.Flatten(),
nn.Linear(16 * 5 * 5, 120),
nn.Sigmoid(),
nn.Linear(120, 84),
nn.Sigmoid(),
nn.Linear(84, 10))
%stride参数:可以规定卷积的步长,与卷积核大小类似 ,若各方向步长相同则可以为整数,否则应为元组 padding参数:在图像的周围补充0的个数,常常用于控制卷积前后图像的尺寸大小。
基本卷积神经网络
AlexNet
网络结构
网络说明
网络一共有8层可学习层——5层卷积层和3层全连接层。
和之前相比改进之处:
①池化层均采用最大池化
②选用ReLU作为非线性环节激活函数
③网络规模扩大,参数数量接近6000万
④出现“多个卷积层+一个池化层”的结构
改进
输入样本
最简单、通用的图像数据变形的方式
①从原始图像(256,256)中,随机的crop出 一些图像(224,224)。【平移变换,crop 】
②水平翻转图像。【反射变换,flip】
③给图像增加一些随机的光照。【光照、彩色变换,color jittering】
激活函数
采用ReLU替代Tan Sigmoid ,用于卷积层与全连接层之后。
Dropout
在每个全连接层后面使用一个 Dropout 层,以概率 p 随机关闭激活函数。
双GPU策略
AlexNet使用两块GTX580显卡进行训练,两块显卡只需要在特定的层进行通信。
相关文章
发表评论