问题
- 密集层与卷积层的区别
- 为什么卷积层的深度可以随意设置,以及卷积层的输出深度为什么是一个参数
- 池化层的作用
- 预训练模型怎么起作用的
- 一些卷积神经网络的可视化方法
知识点
- 两者区别
密集层学到的是全局特征,卷积层学到的是局部特征,卷积层的参数共享,密集层的参数不共享
上面所谓的全局特征指密集层的每个神经单元都会受到上一层所有神经单元的影响,而局部特征指则是卷积层每个神经元由一个卷积核决定,一般为3x3或5x5,这样一个核所能感受到的视野就是有限的。这样的好处就是一个是可以学习到局部特征,比如一张猫的图片,卷积层可以学到猫的眼睛,鼻子,嘴巴等局部特征(这里只是帮助理解实际学习中不一定真的是学到这些特征),这样得到的得到的特征具有平移不变性,在左下角学到猫的眼睛跟在右上角学到猫的眼睛是一样的。第二个好处就是可以学习到模式的空间层次,比如第一层学习到了猫的的眼睛,鼻子等局部特征,这些局部特征又可以组合成更高层次的特征如猫的脸。 - 为什么卷积层的深度可以随意设置,以及卷积层的输出深度为什么是一个参数
另外就是卷积层的参数共享,即一个卷积核对一张图片所有位置都是一样的,这样可以大大减少参数量,比如一张图片是224x224x3,卷积核是3x3x3,那么一层卷积层的参数量就是3x3x3x3x3x3=729,如果是密集层的话,一层的参数量就是224x224x3x3x3=13668736,这样就大大减少了参数量,这也是为什么卷积层的深度可以随意设置的原因,因为卷积层的参数量不会随着深度的增加而增加,而密集层的参数量会随着深度的增加而增加,这样就会导致过拟合。
在keras中设置Conv2D时手动选择输出深度,这个深度就是卷积核的个数,设定好后keras会自动生成对应数量的卷积核,这些卷积核的初始参数是随机的,在训练过程中自动调整,所以可以控制卷积层的输出深度。
比如现在有一张(28,28,1)的单通道图片,可以用32个(3,3,1)的卷积核对其进行卷积,得到32个(26,26,1)的响应图,组合起来就是一个(26,26,1,32)的特征图。
- 池化层的作用
池化层的计算可以看作对刚刚得到的特征图再进行一次卷积,只不过这次卷积的卷积核是(2,2,1)的,步长为2,这样就可以将特征图的尺寸减半(当然可以设置其它尺寸和步长)。主要的作用有两个,其一是扩大感受视野,比如上面得到的(26,26,1,32)的特征图,经过池化层后就变成了(13,13,1,32)的特征图,这样再次卷积时就可以感受更大的视野,因为现在的一个点代表了原来的4个点,其二就是减少参数量,显然上面经过池化层后的参数比以前小得多,这样可以减少过拟合,同时还可以减少计算量。 - 使用预训练网络的两种方法:特征提取和微调模型
- 特征提取,在一个大数据集上训练的卷积网络会有很多已经训练好的卷积层与池化层,这些部分叫卷积基,由于图像的特征是靠各种训练好的卷积核提取的所以卷积基可以重用,来提取图像特征,而后面的密集层则需要重新训练。整个卷积基中越底部的卷积层提取的特征越通用,越靠近顶部的层则一般提取的更抽象的概念,所以多用大模型的前基层来提取特征而不是整个卷积基,另外在训练时需要冻结一些层,否则反向传播的过程将会非常长且效果提升不大
- 微调模型微,微调模型通过解冻预训练模型的高层,略微调整了模型中的高层抽象表示,让这些表示可以与欲解决的问题更相关
- 可视化卷积神经网络的方法:1.可视化中间输出 2.可视化过滤器 3.可视化激活的热力图
- *可视化中间输出 *,展示卷积层和池化层的特征图(层输出通常称为该层的激活)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2128099421@qq.com