用实验数据验证面试题:VGG使用3x3卷积核的优势

简介: 用实验数据验证面试题:VGG使用3x3卷积核的优势

前言


  CV岗面试中经常会问到一些经典神经网络问题,其中具备划时代卷积神经网络VGG为“典中典”,参考面试题如下所示:


面试官:VGG使用3x3卷积核的优势是什么?


参考答案:2个x3的卷积核串联和5x5的卷积核有相同的感知野,前者拥有更少的参数。多个3x3的卷积核比一个较大尺寸的卷积核有更多层的非线性函数增加了非线性表达,使判决函数更具有判决性


   在这里我将以实验数据来证实面试者的回答



实验准备


数据属性 数据量 网络参数 参数值
图像类别数 10 Lr 0.01
图像通道数 1 Train_num:Test_num 350:150
图像像素 20 x 20 maxEpochs 50
单类图像数 500 ValidationFrequency 5
数据属性 数据量 优化器 sgdm


   这里采用LeNet-5作为母版结构进行实验:


   在VGG问世以前网络结构基本是LeNet-5、AletNet和ZFNet,然而AletNet和ZFNet结构基本相似,可以认为一致,但他们的卷积核大小为11x11 和3x3混合实验使用,这里不利于做实验数据比对,无法证实:2个3x3的卷积核串联和5x5的卷积核的差异。


    实验使用LeNet-5作母版的话,结构简单便于开发,不会出现母版不需要更改就出现过拟合现象。


   为了实验更加具备说服力,避免异常情况出现,每次实验数据为实验三次后取的平均值。



网络搭建


   由于实验CNN母版是LeNet-5,在对该网络更改的时也将是LeNet-5中 convolution2dLayer的卷积核大小5x5替换为两个 convolution2dLayer的3x3卷积核。其结构如下:

LeNet-5网络结构

layers = [
    imageInputLayer([20 20 1],"Name","imageinput")
    convolution2dLayer([5 5],6,"Name","conv_1","Padding",[1 1 1 1],"Stride",[4 4])
    batchNormalizationLayer("Name","batchnorm_1")
    reluLayer("Name","relu_1")
    maxPooling2dLayer([2 2],"Name","maxpool_1","Padding","same","Stride",[3 3])
    convolution2dLayer([5 5],16,"Name","conv_2","Padding","same")
    batchNormalizationLayer("Name","batchnorm_2")
    reluLayer("Name","relu_2")
    maxPooling2dLayer([2 2],"Name","maxpool_2","Padding","same","Stride",[2 2])
    convolution2dLayer([5 5],120,"Name","conv_3","Padding","same")
    batchNormalizationLayer("Name","batchnorm_3")
    reluLayer("Name","relu_3")
    fullyConnectedLayer(10,"Name","fc")
    softmaxLayer("Name","softmax")
    classificationLayer("Name","classoutput")];


改LeNet-5网络结构

layers = [
    imageInputLayer([20 20 1],"Name","imageinput")
    groupedConvolution2dLayer([3 3],6,1,"Name","conv1","BiasLearnRateFactor",4,"Padding",[1 1 1 1])
    batchNormalizationLayer("Name","batchnorm_1")
    reluLayer("Name","relu_1")
    maxPooling2dLayer([2 2],"Name","maxpool_1","Padding","same","Stride",[3 3])
    groupedConvolution2dLayer([3 3],16,1,"Name","conv2","BiasLearnRateFactor",4,"Padding",[1 1 1 1])
    batchNormalizationLayer("Name","batchnorm_2")
    reluLayer("Name","relu_2")
    maxPooling2dLayer([2 2],"Name","maxpool_2","Padding","same","Stride",[2 2])
    groupedConvolution2dLayer([3 3],120,1,"Name","conv3","BiasLearnRateFactor",4,"Padding",[1 1 1 1])
    batchNormalizationLayer("Name","batchnorm_3")
    reluLayer("Name","relu_3")
    fullyConnectedLayer(10,"Name","fc")
    softmaxLayer("Name","softmax")
    classificationLayer("Name","classoutput")];


  细心的朋友会发现,我这边改变的仅仅是卷积核的大小,其他层例如池化核激活函数之类的并没有改变,就连卷积层中的Padding我也同LeNet-5保持一致



实验结果:


改LeNet-5第一轮实验:重要实验结果:


  1. 验证准确度:97.27%


  1. 历时:1分50秒(110秒)


image.png

改LeNet-5第二轮实验: 重要实验结果:


  1. 验证准确度:96.53%


  1. 历时:1分54秒(114秒)

image.png


LeNet-5第一轮实验: 重要实验结果:


  1. 验证准确度:83.67%


  1. 历时:1分52秒(112秒)

image.png

LeNet-5第二轮实验: 重要实验结果:


  1. 验证准确度:84.80%


  1. 历时:1分54秒(114秒)

image.png

LeNet-5第三轮实验: 重要实验结果:


  1. 验证准确度:85.60%


  1. 历时:1分52秒(112秒)

image.png

结果分析


综合上述可得:


耗时方面:   LeNet-5(112.0)  > 改LeNet-5(112.6)


验证准确度方面:LeNet-5(84.69)< 改LeNet-5(96.53%)


  我们可以通过耗时来说明:2个3x3的卷积核串联比单个5x5的卷积核拥有更少的拥有更少的参数;在只有卷积核大小不同的情况能够影响网络计算耗时的也就是内部计算参数了。


  同理可以通过验证准确度易得2个3x3的卷积核串联比单个5x5的卷积核增加了非线性表达,使判决函数更具有判决性



从理论角度分析


  因为2个3 * 3的卷积和1个5 * 5的卷积 在通道一致下 ,18(2x3x3)< 25(5x5)



相关文章
|
8天前
|
机器学习/深度学习 Java 网络架构
YOLOv5改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
YOLOv5改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
162 0
|
8天前
|
PyTorch 算法框架/工具
Pytorch中最大池化层Maxpool的作用说明及实例使用(附代码)
Pytorch中最大池化层Maxpool的作用说明及实例使用(附代码)
128 0
|
8天前
|
机器学习/深度学习 存储 TensorFlow
【Python机器学习】卷积神经网络卷积层、池化层、Flatten层、批标准化层的讲解(图文解释)
【Python机器学习】卷积神经网络卷积层、池化层、Flatten层、批标准化层的讲解(图文解释)
123 0
|
8天前
|
机器学习/深度学习
大模型开发: 解释批量归一化以及它在训练深度网络中的好处。
批量归一化(BN)是2015年提出的加速深度学习训练的技术,旨在解决内部协变量偏移、梯度消失/爆炸等问题。BN通过在每层神经网络的小批量数据上计算均值和方差,进行标准化处理,并添加可学习的γ和β参数,保持网络表达能力。这样能加速训练,降低超参数敏感性,对抗过拟合,简化初始化。BN通过稳定中间层输入分布,提升了模型训练效率和性能。
55 3
|
8天前
|
机器学习/深度学习 并行计算
YOLOv8改进 | ODConv卷积助力极限涨点(附修改后的C2f、Bottleneck模块代码)
YOLOv8改进 | ODConv卷积助力极限涨点(附修改后的C2f、Bottleneck模块代码)
197 0
|
8天前
|
机器学习/深度学习 Java 网络架构
YOLOv8改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
YOLOv8改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
151 0
|
8天前
|
机器学习/深度学习 算法 PyTorch
手把手教你搭建一个深度网络模型:从输入层-激活函数-损失函数-优化方法-输出层-执行训练
我这几天遇到一个不错的范例,将的是一层一层教我们搭建一个神经网络,其实很多我接触过的伙伴对修改模型架构这块还是头疼。其实我么可以从简单的神经网络层开始,自己DIY每一层,对上手修改架构有帮助。这里用的是paddle框架,当然玩pytorch的朋友也别急着关掉,因为我这几天刷到的pytorch感觉和飞桨的这块几乎是非常相似。只是有点点表达不一样,其他都完全一样。甚至连编程习惯都非常一样。下面是来自PaddlePaddle FLuid深度学习入门与实战一书的案例。
119 0
|
12月前
|
机器学习/深度学习 并行计算 固态存储
YOLO系列 | 一份YOLOX改进的实验报告,并提出更优秀的模型架构组合!
YOLO系列 | 一份YOLOX改进的实验报告,并提出更优秀的模型架构组合!
161 0

热门文章

最新文章