【实战2】手写字识别 Pytoch:CNN卷积神经网络

1 CNN网络基础

1.1 背景

CNN带来了哪些好处?
  • 参数共享,相较于全连接,大大减少了学习参数量
  • 稀疏连接,每个神经元只需要链接如数图像的一个局部
  • 平移不变形,无论目标出现在图片哪里,filter都可以扫到
  • 多层次特征提取,通过多层卷积和池化来实现
  • CNN考虑空间关系适合处理图像,而全连接是一维的
主要用来做什么?

图像分类、目标检测、图像分割、超分(变清晰)、图像风格迁移、图像修复、图像生成

1.2 卷积操作

Kernel、Pading、Stride
  • 传统计算机视觉:检测边缘需要自己定义kernel
  • 深度学习:深度神经网络自己找到kernel:是通过用户传入的数据学习到的

Pading:为了让输出等于原图,在外围加一圈为0的padding

stride:在kernel原图上移动的距离,一般为1

 输出维度   

\frac{n+2p-f}{s}+1

  • n原图的宽和高
  • f为kernel的大小
  • p为padding填充的圈数
  • s表示kernel跨度
  • 计算结果向下取整

例如:原图8*8,kernal 3*3,padding1,stride1,则为 (8+2*1-3)/1 + 1 = 7+1=8

2.3 三维卷积与多核卷积

三维卷积

先乘法,再相加:三维变成一维

多核卷积

卷积过程

  1. 每个核卷出一个二维数据 :w·a
  2. 对于二维数据中的每一项加入偏置d: z=w·a+b
  3. 放入relu激活函数中:g(z)

符号

1.3 池化操作

目的:减少特征图的大小,降低计算量和参数数量,同时保留重要特征

好处:降低计算量、防止过拟合(减少特征尺寸->降低模型复杂度)

什么时候:卷积后使用池化

种类:最大值池化,平均值池化

2 标准的卷积网络CNN

标准流程 / 层

卷积层 - CONV -Convolution

池化层 - POOL - Pooling

全连接层 - PC - Fully Connected

LeNet5(经典)

Pytorch实现网络(基于全连接网络进行修改)

# 构建神经网络 2层 输入28*28,第一层128个神经元,激活函数relu,第二层10个神经元
class NeunalNetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.nmodel = nn.Sequential(
            # layer 1 卷积层
            nn.Conv2d(1, 32, 3), 
            nn.BatchNorm2d(32), 
            nn.ReLU(), 
            nn.MaxPool2d(2, 2), # 池化层,减少特征图的尺寸
            # layer 2 卷积层
            nn.Conv2d(32, 64, 3), 
            nn.BatchNorm2d(64),
            nn.ReLU(), 
            nn.MaxPool2d(2, 2), # 池化层,减少特征图的尺寸
            # 全连接层
            nn.Flatten(), # 卷积后的结果转为列向量,作为参赛传给全连接
            nn.Linear(5*5*64, 128), # 输入层到隐藏层 
            nn.BatchNorm1d(128), # 优化点:批归一化层
            nn.ReLU(), # 激活函数
            nn.Dropout(0.2), # 优化点:Dropout层,防止过拟合
            nn.Linear(128, 10) # 隐藏层到输出层
        )

    def forward(self, x):
        # x = nn.Flatten(1)(x) # 将输入展平
        output = self.nmodel(x) #对模型训练
        return output
        
model = NeunalNetwork().to(device)
print(model)

训练结果明细优于全接连

经典CNN架构

 LeNet5(经典)

作者:深度学习三剑客的杨丽坤

2个卷积层、3个全连接层

使用平均池化、

使用MNIST数据集,较小

AlexNet 2012

ImageNet 2012 冠军、作者:辛顿团队2个学生

  • 5个卷积层、3个全连接层:对比LeNet5 网络规模更大
  • 开始使用激活函数Relu
  • 开始使用Dropout正则化
  • 开始使用最大值池化
  • 开始使用数据增强技术:图像平移、翻转、裁剪
  • 使用ImageNet大型数据集
  • 开始使用多GPU训练

——AlexNet 算法的改进、ImageNet数据的革命、算力由英伟达引领

VGGNet 2014

作者:英国剑桥

使用多个3*3卷积核替代AlexNet的大卷积核

具有大卷积核相关的视野,同时参数大幅减少

具有更深层次VGG-16 VGG-19,小卷积核支持构建更深网络

更深网络可以学习更复杂的特征,性能更优

网络结构更简单一致、都是3*3卷积 + 2*2最大池化

ResNet 

作者:微软研究院何等人

  • 解决深度网络梯度消失与爆炸问题
  • 可以让神经网络达到上百层甚至上千层
  • 即使残差函数学习的权重是0,仍可以表现像一个恒等映射,从而保障训练更深的网络时,性能不会退化

ResBlock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值