1.深度学习平台简介
1.1平台分类
1.2 PyTorch简介
PyTorch是一个Python的深度学习库。 它最初由Facebook人工智能研究小组开发, 而优步的Pyro软件则用于概率编程。
1.3PyTorch基本概念
pytorch主要使用tensor(张量)这一数据结构,并且搭建网络模型简单便利。如下:
def build_net(device, num_input, num_output):
net = nn.Sequential(nn.Flatten(),
nn.Linear(num_input, 64),
nn.ReLU(),
nn.Linear(64, num_output))
net.apply(init_weights)
net = net.to(device)
return net
2.卷积神经网络基础
2.1进化史
2.2基本概念
卷积神经网络是一种深度学习模型类似于神经网络的多层感知器,常用来分析视觉图像处理与图像识别相关的机器学习问题,比如图像分类,目标检测,图像分割等各种视觉任务。
2.2.1常用基本概念
全连接网络:链接权过多,也很难收敛,同时可能会进入局部极小值,容易产生过拟合问题
局部连接网络:只有一部分权值连接,只有部分输入和权值卷积
特征提取:
填充(Padding):在矩阵边界填充一些值,用以增加矩阵的大小,通常用0或者复制边界像素进行填充。
步长(Stride):卷积核在原图上每一步移动的距离,如图步长为2。
池化(Pooling):使用局部统计特征,如均值或最大值,解决特征过多的问题。
2.3 学习算法
3.卷积神经网络(LeNet-5网络)
3.1网络结构
3.2结构详解
C1层:
Pooling层:
C3层:
S4层 :与S2层工作相同。
C5层:
F6层:
输出层:
网络的特点:
1.卷积时不进行填充
2.池化层选用平均池化而不是最大池化
3.选用sigmoid或者tanh函数作为非线性环节激活函数
4.层数较浅,不会造成处理大量参数的情况
3.3误差反向传播
3.4代码实现
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)
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的个数,常常用于控制卷积前后图像的尺寸大小。