目录
第五部分、卷积神经网络基础
第一章 深度学习平台介绍
1.1 深度学习平台简介
机器学习可以用于模式识别,数据挖掘,统计学习,计算机视觉,语音识别,自然语言处理等方面。常用的深度学习平台以及他们对应的特点以及支持的系统如下:
这些平台对应的特点比较如下图所示:
1.2 PyTorch简介
PyTorch是一个Python的深度学习库。它最初由Facebook人工智能研究小组开发,而优步的Pyro软件则用于概率编程。 最初,PyTorch由Hugh Perkins开发,作为基于Torch框架的LusJIT的Python包装器。PyTorch在Python中重新设计和实现Torch,同时为后端代码共享相同的核心C库。除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了PyTorch。到目前,据统计已有80%的研究采用PyTorch,包括Google。
1.3 PyTorch基本使用-基本概念
张量:是一个物理量,对高维 (维数 ≥ 2) 的物理量进行“量纲分析” 的一种工具。简单的可以理解为:一维数组称为矢量,二维数组为二阶张量,三维数组为三阶张量。
计算图:用“结点”(nodes)和“线”(edges)的有向图来描述数学计算的图像。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入的起点/输出的终点,或者是读取/写入持久变量的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)
·使用 tensor 表示数据
·使用 Dataset、DataLoader 读取样本数据和标签
· 使用变量 (Variable) 存储神经网络权值等参数
·使用计算图 (computational graph) 来表示计算任务
·在代码运行过程中同时执行计算图
1.3 PyTorch基本使用-简单实例
构建简单的计算图,每个节点将零个或多个tensor作为输入,产生一个tensor作为输出。PyTorch中,所见即为所得,tensor的使用和numpy中的多维数组类似:
1.3 基本使用-线性回归
给出100个散点样本,可以求出回归方程。
第二章 卷积神经网络基础
2.1 进化史
2.2 基本概念
全连接网络:链接权过多,难算难收敛,同时可能进入局部极小值,也容易产生过拟合问题
局部连接网络:只有一部分权值链接,部分输入和权值卷积。
填充:在矩阵的边界上填充一些值,来增加矩阵的大小。
卷积神经网络结构:由多个卷积层和下采样层构成,后面连接全连接网络
2.2 学习算法
递推:前向传播:
第三章 LeNet - 5网络
3.1 网络介绍
3.2 结构详解
C1层:6个Feature map构成,每个神经元对输入进行5*5卷积,每个神经元对应5*5+1个参数,一共六个feature map,28*28个神经元,共有(5*5+1)*6*(28*28)=122304个连接。
S2层:Pooling层 C3层:卷积层
S4层:与S2层工作相同 C5:120个神经元,对输入进行5*5卷积
F6层:84个神经元,与C5全连接
输出层:由欧式径向基函数单元构成,每类一个单元
3.3 误差反向传播
经典BP算法
卷积NN的BP算法:下采样层。
3.4 网络结构可视化
网络结构可视化:https://adamharley.com/nn_vis/cnn/3d.html
3.5代码实现
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.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
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))
第四章 基本卷积神经网络
4.1 AlexNet
网络说明:网络一共有8层可学习层
改进:输入样本,最简单通用的图像数据变形的方式
改进:激活函数:采用ReLU代替Tan Sigmoid,用于卷积层和全连接层之后。
改进:Dropout:在每个全连接层后面使用一个Dropout层
改进:双GPU策略:两块显卡只需要在特定的层进行通信
4.2 VGG-16
可视化: