卷积神经网络基础

为什么要“深度学习”

全连接网络问题:链接权过多,算的慢,难收敛,同时可能进入局部极小值,也容易产生过拟合问题。

解决算的慢问题:减少权值连接,每一个节点只连到上一层的少 数神经元,即局部连接网络。

类比人类解决思路:信息分层处理,每一层在上层提取特征的基础上获取进行再处理,得到更高级别的特征。

深度学习平台简介

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显卡进行训练,两块显卡只需要在特定的层进行通信。

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: