1.卷积神经网络
1.1 相关概念:
全连接网络:链接权过多,难算难收敛,同时可 能进入局部极小值,也容易产生过拟合问题。
局部连接网络:顾名思义,只有一部分权值连接。 部分输入和权值卷积。
填充(Padding):也就是在矩阵的边界上填充一些值,以 增加矩阵的大小,通常用0或者复制边界像素来进行填充。
步长(Stride):滑动卷积核时,会先从输入的左上角开始,每次往左滑动一列或者往下滑动一行逐一计算输出,有时候为了高效计算或是缩减采样次数,卷积窗口可以跳过中间位置,每次滑动多个元素。将每次滑动的行数和列数称为步长(Stride)。
池化: 思想:使用局部统计特征,如均值或最大值。解 决特征过多问题。
1.2 卷积神经网络结构
- 构成:由多个卷积层和下采样层构成,后面可连接全连接网络
- 卷积层:k个滤波器
- 下采样层:采用mean或max
- 后面:连着全连接网络
1.3 学习算法
2. LeNet-5网络
网络基本结构如下:
2.1 图中各层详解
图中C1层
6个Feature map构成。每个神经元对输入进行5*5卷积。每个神经元对应5*5+1个参数,共6个feature map,28*28个神经元,因此共有(5*5+1)*6*(28*28)=122,304连接
图中S2层
图中C3层
卷积层,从上一层的6个通道按图中顺序组合,形成了本层的16个通道。
图中S4层
与S2层工作原理相同。
图中C5层
- 120个神经元
- 每个神经元同样对输入进行5*5卷积,与S4全连接
- 总连接数(5516+1)*120=48120
图中F6层
- 84个神经元
- 与C5全连接
- 总连接数(120+1)*84=10164
图中输出层
- 由欧式径向基函数单元构成
- 每类一个单元
- 输出RBF单元计算输入向量和参数向量之间的欧式距离
2.2 网络结构详解
与现在网络的区别:
-卷积时不进行填充(padding)
-池化层选用平均池化而非最大池化
-选用Sigmoid或tanh而非ReLU作为非线性环节激活函数
-层数较浅,参数数量小(约为6万)
2.3 LeNet网络代码实现
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))
3 误差反向传播