深度学习第二周培训-卷积神经网络

一、传统神经网络和卷积神经网络比较

  • 传统的BP神经网络是一种由大量的节点(神经元)之间相互联接构成,按照误差逆向传播算法训练的多层前馈神经网络。
  • 卷积神经网络是包含卷积计算且具有深度结构的前馈神经网络。在原来多层神经网络的基础上,加入了特征学习部分,这部分可以模仿人脑对信号的处理;其中隐藏层可以进一步分为卷积层和池化层,卷积层通过一块块卷积核在原始图像上平移来提取特征,池化层是一个筛选过滤的过程。
  • 传统的神经网络在处理图像问题时权重矩阵的参数太多,容易造成过拟合现象;而卷积神经网络可以通过局部关联、参数共享方式,可以用较少的参数,训练出更好的模型,避免出现过拟合现象。

二、卷积神经网络的基本机构

1.卷积

  • 卷积是对两个实变函数的一种数学操作。
  • 卷积层是卷积网络的核心,大多数计算都是在卷积层中进行的。卷积层中的每一个节点的输入只是上一层神经网络中的一小块,卷积层通过一块块卷积核在原始图像上平移来提取特征;一般来说,卷积层的参数是有一些可学习的滤波器集合构成的,每个滤波器在宽度和高度上都比较小,但是深度输入和数据保持一致。
  • 另外,由于卷积具有“参数共享”的特性,可以降低参数数量,防止由于参数过多而造成过拟合。

2.池化

  • 池化层和卷积层一样也有一个空间窗口,通常取这些窗口中的最大值或平均值作为输出的结果,然后不断滑动窗口,对输入数据体的每一个深度切片单独处理,减少数据体的尺寸空间。
  • 池化层的作用是在保留主要特征的同时减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。
  • 另外,池化前后深度不变。

3.全连接

  •  全连接层与一般的全连接层相同。其输入层是前面的特征图,会将特征图中所有的神经元变成全连接的形式。这个过程为了防止过拟合会引入Dropout。在进入全连接层之前,使用全局平均池化能够有效的防止过拟合。
  • 全连接层通常位于卷积神经网络尾部。

三、卷积神经网络的典型结构

1.AlexNet

  • AlexNet使用了relu激活函数、dropout、数据增强、LRN归一化,后来研究发现LRN的作用并不大,更多使用BatchNormal做归一化。
  • AlexNet使用GPU训练, 证明了CNN在复杂模型下的有效性,具有开创性的意义。

下面是AlexNet的分层解析:

第二层、第三层、第四层、第五层......

2.ZFNet

ZFNet从可视化的角度,解释了CNN,得到以下的一些结论:特征是分层次的;深层特征更鲁棒;深层特征更有区分度;深层特征收敛更慢等。

3.VGG

  • VGG证明了更深的网络,能够提取更好的特征;
  • 结构更加规整、简单:全部使用3x3的小卷积核和2x2的最大池化;
  • 每次池化后,特征图宽高减半,通道数增加一倍;
  • 参数大多数在全连接层中;

4.GoogleNet

  • Inceptionv1利用1x1卷积核进行通道降维,减小了参数量和计算量;Inceptionv2使用多个小卷积核代替一个大卷积核,如两个3x3代替5x5;Inceptionv3使用1xn和nx1代替nxn。
  • Inception的设计使得网络更深更宽,卷积数量增加,每个卷积后面都跟着激活函数,使得网络的非线性能力更强。

5.ResNet

 使用Average Pooling代替一个FC层。每个卷积层之后都配合一个BN进行归一化,加快网络训练速度和收敛的稳定性,防止过拟合。

 对每层的输入做一个reference(X), 学习形成残差函数。这种残差函数更容易优化,能使网络层数大大加深

四、代码练习

1.构建简单的CNN对 mnist 数据集进行分类

1.1加载数据集

1.2显示部分图像 

1.3构建神经网络结构

定义网络时,需要继承nn.Module,并实现它的forward方法。

 1.4定义训练和测试函数

1.5在小型全连接网络上训练,结果如下

1.6在卷积神经网络上训练,结果如下

 通过上面的测试结果,可以发现,含有相同参数的 CNN 效果要明显优于简单的全连接网络,是因为 CNN 能够更好的挖掘图像中的信息。

 1.7打乱像素顺序再次在两个网络上训练与测试

 在全连接网络上训练与测试:

在卷积神经网络上训练与测试:

  •  根据测试结果我们可以发现:全连接网络的性能基本上没有发生变化,但是卷积神经网络的性能明显下降。
  • 这是因为对于卷积神经网络,会利用像素的局部关系,但是打乱顺序以后,这些像素间的关系将无法得到利用。

2.使用 CNN 对 CIFAR10 数据集进行分类

2.1加载数据

2.2下面展示 CIFAR10 里面的一些图片:

 2.3定义网络,损失函数和优化器:

2.4训练网络

 

2.5现在我们从测试集中取出8张图片: 

我们把图片输入模型,可以看到CNN有几个识别错了

2.6网络在整个数据集上的表现:

通过改进网络结构,性能还可以进一步提升。在 Kaggle 的LeaderBoard上,准确率高的达到95%以上。 

3.使用 VGG16 对 CIFAR10 分类

3.1定义 dataloader

3.2VGG 网络定义

 3.3进行网络训练

3.4 测试验证准确率:

 可以看到,使用一个简化版的 VGG 网络,就能够显著地将准确率由 64%,提升到 83.55%。

五、问题回答

1、dataloader 里面 shuffle 取不同值有什么区别?

  • dataloader中设置shuffle值为True,表示每次加载的数据都是随机的,将输入数据的顺序打乱。shuffle值为False,表示输入数据顺序固定。

2、transform 里取了不同值,这个有什么区别?

  • transform 对数据进行某种统一处理,进行标准化、降维、归一化、正则化等变换操作。

3、epoch 和 batch 的区别?

  • batch大小是在更新模型以前处理的多个样本。epoch数是经过训练数据集的完整传递次数。批处理的大小必须大于或等于1且小于或等于训练数据集中的样本数。能够将epoch设置为1和无穷大之间的整数值。

4、1x1的卷积和 FC 有什么区别?主要起什么作用?

  • 1x1的卷积层采用参数共享方式,需要的参数量会比FC层所使用的参数量少,计算速度更快;1*1的卷积可以用于降维(减少通道数),升维(增加通道数),代替fc成为一个分类器;另外,FC层对于训练样本要求统一尺寸,但是1x1的卷积不会受该规定的限制;

5、residual leanring 为什么能够提升准确率?

  • 残差学习通过残差网络结构,使用恒等映射直接将前一层输出传到后面,可以把网络层弄的很深,并且最终的分类效果也非常好,使得整个学习模型的错误率下降。

6、代码练习二里,网络和1989年 Lecun 提出的 LeNet 有什么区别?

  • 模型构造不同。以AlexNet为例,AlexNet网络包含8层,其中包括5层卷积和2层全连接隐藏层,以及1个全连接输出层。
  • 激活函数不同。传统的LeNet网络使用的是sigmoid激活函数,而AlexNet使用的是ReLU函数。ReLU函数比sigmoid函数计算上更为简单,且ReLU函数在不同的参数初始化方法下可以让模型更容易训练。

7、代码练习二里,卷积以后feature map 尺寸会变小,如何应用 Residual Learning?

  • Residual Learning在shortcut中采用1x1的卷积,设置步长为2;1x1在卷积的时候设置输出维度为残差连接相同的维度,上述操作也被称为线性变换,进而对大小不同的feature map进行调整。

8、有什么方法可以进一步提升准确率?

  • 使用特征更明显、分类更合理的数据集,对数据预处理
  • 选择性能最优的神经网络结构,例如: VGG、Resnet、谷歌的 Inception 网络等
  • 选择合适的优化器、损失函数、激活函数

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值