第八章 卷积神经网络CNN

一、卷积神经网络

1.1 图片的数据格式

通常是3通道的RGB图
在这里插入图片描述

  • 由于全连接层处理图片这种数据量较大的数据时,会需要学习到很大的参数,考虑到计算机硬件的配置,应该使用卷积处理
    在这里插入图片描述

1.2 卷积原理

  • 创建卷积核,使其作为输入的共享权重,执行卷积操作,以此减少参数量
    在这里插入图片描述

  • 卷积操作
    在这里插入图片描述

  • 卷积操作考虑的是局部的输入数值
    在这里插入图片描述

  • 信号处理的卷积过程
    在这里插入图片描述

1.3 卷积层

在这里插入图片描述

  • 可设置 same(设置padding以保持卷积前后图片尺寸不变) 与 valid(不设置padding,卷积后图片变小) 卷积
    在这里插入图片描述

注:① input_channels:表示输入特征图的通道数(输入层一般为RBG_num=3)
② Kernel_channels:a)表示与input_channels对应的数量;b)>表示卷积核的个数
③ Kernel_size:表示卷积核的尺寸
④ Stride:表示卷积步长
⑤ Padding:表示使用same卷积时的边缘填充大小

  • 实际卷积场景举例
    在这里插入图片描述

  • pytorch实现卷积层
    nn.Conv2d(input_channel,kernel_num,kernel_size,stride,padding)
    ① input_channel:输入特征图通道数
    ② kernel_num:卷积核个数
    ③ kernel_size:卷积核尺寸
    ④ stride:卷积步长
    ⑤ padding:填充大小
    在这里插入图片描述

注意:pytorch提供 out = layer(x) 的实现方式,尽量不使用forward()方法
在这里插入图片描述

1.4 池化层

在这里插入图片描述

  • 池化层实现对卷积后的数据进行降采样,一般取size=2,stride=2,这样就是减少一半的数据
    在这里插入图片描述

在这里插入图片描述

  • pytorch实现池化层
    在这里插入图片描述

  • 上采样的原理与pytorch实现
    上采样:即使用最近邻内插法、双线性内插法、双三次内插法实现特征图放大
    在这里插入图片描述

  • F.interpolate(input,scale_factor,mode)
    ① input:输入特征图tensor
    ② scale_factor:放大倍数
    ③ mode:上采样方式(‘nearest’,‘bilinear’,‘bicubic’)
    在这里插入图片描述

  • ReLu激活函数接入在池化层之后
    注:标准的CNN网络,各层接法如下:
    卷积层 + BN + 池化层 + ReLu
    or
    卷积层 + BN + ReLu + 池化层
    在这里插入图片描述

  • pytorch实现
    在这里插入图片描述

1.5 BatchNorm

对输入值进行批量归一化,从而控制激活函数输出在有效梯度范围内,从而提高学习效率
在这里插入图片描述

在这里插入图片描述

  • transforms.Normalize()可以实现设定分布的的归一化处理
    在这里插入图片描述

  • Batch Norm:实际上是对batch中各tensor的对应channel上数据进行归一化操作
    在这里插入图片描述

  • batch Norm中涉及仿射过程, γ \gamma γ β \beta β是需要学习的参数
    在这里插入图片描述

  • pytorch实现BatchNorm
    ① nn.BatchNorm1d(channel)适用于一维数据的归一化
    a) channel:即输入通道数
    在这里插入图片描述

在这里插入图片描述

② nn.BatchNorm2d(channel)适用于二维数据的归一化
a) channel:即输入通道数
layer.weight 对应 γ \gamma γ
layer.bais 对应 β \beta β
在这里插入图片描述

③ nn.BatchNorm1d()、nn.BatchNorm2d()中的参数意义
a) affine:表示是否引入 γ \gamma γ β \beta β做仿射变换(True or False)
b) eps:表示设置使归一变换中使分母不为0的最小值
c) momentum:动量值,默认为0.1
d) track_running_stats:是否追踪训练过程
e) training:表示是否处于训练过程(True or False)
在这里插入图片描述

  • 在测试过程中,由于没有batch(批量)输入,因此需要手动的关闭BatchNorm1d\BatchNorm2d的功能,layer.eval()。同时,Test过程的BatchNorm会使用全部量做归一化
    在这里插入图片描述

  • BatchNorm效果可视化展示
    在这里插入图片描述

  • 总结
    使用BatchNorm的优点
    ① 收敛速度更快
    ② 更好的表现(得到更好的最优解)
    ③ 更加稳定
    在这里插入图片描述


二、经典卷积神经网络

在这里插入图片描述

2.1 LeNet-5

在这里插入图片描述

2.2 AlexNet

在这里插入图片描述

2.3 VGG

提出 1*1、3*3 作为更有效的卷积大小
在这里插入图片描述

2.4 GoogLeNet-2

使用 1*1 的kernel可以减小特征图的channel数,减少参数量
在这里插入图片描述

  • 单元结构
    在这里插入图片描述

  • 网络结构
    在这里插入图片描述

2.5 ResNet

在这里插入图片描述

在这里插入图片描述

2.6 网络结构发展

在这里插入图片描述

在这里插入图片描述

  • pytorch实现ResNet
    在这里插入图片描述

2.7 DenseNet

在这里插入图片描述


三、nn.Moudule类

在这里插入图片描述

在这里插入图片描述

  • 使用继承nn.Module的好处
    ① 可以使用众多的 nn 下的模型块组件(均是nn.Module的子类)
    在这里插入图片描述

② nn.Sequential提供容器化组建各个模型块的方式
注:在nn.Sequential()内即可以写入已有的模块(nn下的模块),同时也可以写入用户自定义实现的继承自nn.Moudle的类
在这里插入图片描述

③ net.parameters() 返回所有的学习参数,便于管理
在这里插入图片描述

④ 自定义继承nn.Module类
在这里插入图片描述

在这里插入图片描述

⑤ 定义使用CPU、GPU加速
在这里插入图片描述

⑥ save and load
提供定时保存学习过程中的中间状态
在这里插入图片描述

⑦ train/test
a) 使用net.train() 可以开启模型训练
b) 使用 net.eval() 可以将模型从 train 向 test 进行切换
在这里插入图片描述

⑧ 应用自定义层
在这里插入图片描述

  • 应用 nn.Parameter()可以自动的将要学习的参数添加进自定义模型中,在optim.SGD()中传入的net.parameter()会包含自定义的参数
    在这里插入图片描述

四、数据增强

通过一系列的变换,扩充数据集
在这里插入图片描述

  • 数据增强的方式
    ① 翻转
    ② 旋转
    ③ 随机捕捉
    ④ GAN
    在这里插入图片描述

4.1 翻转

在这里插入图片描述

  • pytorch实现
    在传入参数中使用:
    ① transforms.RandomHorizontalFlip()调整图像水平翻转
    ② transforms.RandomVerticalFlip()调整图像竖直翻转
    在这里插入图片描述

4.2 旋转

在这里插入图片描述

  • pytorch实现
    在传入参数中使用:transforms.RandomRotation()调整图像旋转角度
    a) 传入数值var,表示(-var,var)角度范围内随机旋转
    b) 传入list,表示随机对图片进行选定值的旋转
    在这里插入图片描述

4.3 缩放

在这里插入图片描述

  • pytorch实现
    在传入参数中使用:transforms.Resize([w,h])调整缩放大小
    在这里插入图片描述

4.4 裁剪

在这里插入图片描述

  • pytorch实现
    在传入参数中使用:transforms.RandomCrop([w,h])选择裁剪区域大小
    在这里插入图片描述

4.5 加入白噪声

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ModelBulider

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值