高级实训任务一

高级实训 任务一

基于CNN及其变体的图像分类

实验任务描述

卷积神经网络(CNN)因为其能够自动抽取图像的浅层到深层的特征,所以在近几年有许多应用。我们尝试用一种CNN来对一个数据集进行图像分类。
这里选择的CNN为:AlexNet、ResNet。
数据集为:MNIST手写数据集。
深度学习框架:Tensorflow。

实验环境配置

Anaconda获取

可直接从官网得到anaconda的最新版本
https://www.anaconda.com/products/individual
并且可以直接使用附带的spyder对代码进行编辑

Tensorflow配置

在anaconda中使用命令行运行以下代码:

conda install tensorflow

等待即可将其安装完成
请添加图片描述

另外也可使用pip,或去tensorflow的github官网下载

MNIST数据集获取

该数据集已经被集成在tensorflow的库里了,因此我们可以直接将其调用

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data", one_hot=True)

实验原理简介

Alexnet

网络结构:

请添加图片描述

网络各层参数:

1.AlexNet共8层,包括5个卷积层和3个全连接层
2.每一层都使用了Relu函数作为激活函数
3.AlexNet有一个特殊的计算层-LRN层,开辟性的使用了LRN(局部相应归一化层)

各层计算方式:

Layer1:Conv-> Relu->pooling->LRN
input: 2242443
卷积核大小: 1111396个
stride = 4
group = 2:这个属性强行把前面的结果fecture map分开,卷积部分分成两个部分做
池化层窗口大小: 3
3,stride =2
卷积后output: 555596
池化后output:272796

Layer2:Conv-> Relu->pooling->LRN
input: 272796
卷积核大小: 5596256个
stride = 1,padding=2
池化层窗口大小: 3
3256,stride =2
卷积后output: 27
27256
池化后output:13
13*256

Layer3:Conv->LRN
input:1313256
卷积核:33256384个
stride=1;padding=1
output:13
13*384

Layer4:Conv->LRN
input:1313384
卷积核:33384个
stride=1;padding=1
output:1313384

Layer5: Conv->Relu->pooling->dropout
input:1313384
卷积核:33256
stride=1;padding=1
池化层窗口:stride=2
卷积后output:1313256
池化后output:66256

Layer6: 全连接层>Relu->dropout
input:66256
该层有4096个卷积核,每个卷积核的大小为66256.由于卷积核的尺寸刚好与待处理的特征图(输入)尺寸相同,即卷积核中的每个系数与特征图(输入)尺寸的一个像素值相乘,一一对应, 因此,该层被称为全连接层。由于卷积核与特征图的尺寸相同,卷积运算后就只有一一个值,因此,卷积后的像素尺寸为409611,即有4096个神经元。

Layer7: 全连接层>Relu->dropout

Layer8: 全连接层-Relu

Resnet

背景:

随着网络深度增加,会出现一种退化问题,也就是当网络变得越来越深的时候,训练的准确率会趋于平缓,但是训练误差会变大,这明显不是过拟合造成的,因为过拟合是指网络的训练误差会不断变小,但是测试误差会变大。
为了解决这种退化现象,ResNet被提出。我们不再用多个堆叠的层直接拟合期望的特征映射,而是显式的用它们拟合一个残差映射。
假设期望的特征映射为H(x),那么堆叠的非线性层拟合的是另一个映射,也就是F(x)=H(x)-x。假设最优化残差映射比最优化期望的映射更容易,也就是F(x)=H(x)-x比F(x)=H(x)更容易优化,则极端情况下,期望的映射要拟合的是恒等映射,此时残差网络的任务是拟合F(x)=0,普通网络要拟合的是F(x)=x,明显前者更容易优化。

残差块:

请添加图片描述

定义一个残差块的形式为y=F(x,Wi)+x,其中x和y分别为残差块的输入和输出向量,F(x,Wi)是要学习的残差映射,在上图中有2层,F=W2σ(W1X),σ是Relu激活函数,在这个表达式中为了方便起见,省略了偏置,这里的shortcut connections是恒等映射,之所以用恒等映射是因为这样没有引进额外的参数和计算复杂度。

网络结构:

请添加图片描述

实验过程与结果

Alexnet

由于mnist数据集种图片大小为28281,所以我们对卷积核大小和步长都进行了缩小,防止图片减小过快。
以下为运行结果:
请添加图片描述

可见,结果达到了90%左右
以下为loss随着step的变化:
请添加图片描述

Resnet

以下为网络参数:
请添加图片描述

以下为网络曲线:
请添加图片描述

实验结论

Alexnet的优点:

1.用ReLU得到非线性,用ReLU非线性函数作为激活函数
2.使用dropout的trick在训练期间有选择性的忽略隐藏层神经元,来减缓学习模型的过拟合
3.使用重叠最大池进行池化操作,避免平均池的平均效果
4.使用GPU可以减少训练时间,这比CPU处理快了10倍,所以可以被用于更大的数据集和图像上。

Resnet的优点:

  1. 与传统的神经网络相比残差神经网络具有更好的深度网络构建能力,能避免因为网络层次过深而造成的梯度弥散和梯度爆炸。
  2. 残差网络与普通网络不同的地方就是引入了跳跃连接,这可以使上一个残差块的信息没有阻碍的流入到下一个残差块,提高了信息流通,并且也避免了由与网络过深所引起的消失梯度问题和退化问题。

参考资料

https://www.cnblogs.com/codeit/p/11179454.html
https://blog.csdn.net/MESSI_JAMES/article/details/81384534#t8
https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值