用实验数据验证面试题: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)



相关文章
|
4月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
119 0
|
3月前
|
机器学习/深度学习 算法 PyTorch
【深度学习】TensorFlow面试题:什么是TensorFlow?你对张量了解多少?TensorFlow有什么优势?TensorFlow比PyTorch有什么不同?该如何选择?
关于TensorFlow面试题的总结,涵盖了TensorFlow的基本概念、张量的理解、TensorFlow的优势、数据加载方式、算法通用步骤、过拟合解决方法,以及TensorFlow与PyTorch的区别和选择建议。
251 2
|
4月前
|
存储 监控 算法
Java面试题:解释分代垃圾回收策略,并说明其优势
Java面试题:解释分代垃圾回收策略,并说明其优势
51 0
|
4月前
|
监控 网络协议 Java
Java面试题:解释Java NIO与BIO的区别,以及NIO的优势和应用场景。如何在高并发应用中实现NIO?
Java面试题:解释Java NIO与BIO的区别,以及NIO的优势和应用场景。如何在高并发应用中实现NIO?
75 0
|
4月前
|
设计模式 并行计算 安全
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
50 0
|
4月前
|
安全 Java 数据库连接
Java面试题:解释Java内存模型的无锁编程支持,并讨论其优势和局限性,解释Java中的CompletableFuture的工作原理,并讨论其在异步编程中的应用
Java面试题:解释Java内存模型的无锁编程支持,并讨论其优势和局限性,解释Java中的CompletableFuture的工作原理,并讨论其在异步编程中的应用
29 0
|
6月前
|
安全 编译器 C++
【Qt 面试题】Qt信号槽机制与优势与不足
【Qt 面试题】Qt信号槽机制与优势与不足
136 1
|
Cloud Native 数据挖掘 Go
跳槽面试:如何转换工作场所而不失去优势
跳槽面试:如何转换工作场所而不失去优势
63 0
|
机器学习/深度学习 人工智能 算法
强化学习从基础到进阶-常见问题和面试必知必答5::梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)
强化学习从基础到进阶-常见问题和面试必知必答5::梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)