网易云课堂吴恩达深度学习微专业相关感受和总结。因为深度学习较机器学习更深一步,所以记录机器学习中没有学到或者温故知新的内容。从总体架构的角度思路来看待机器学习问题
也做了不少CNN相关的项目内容,结合已知进行思考总结。
上一篇:深度学习(3)--小总结(评估指标,查准查全率,正交化思想,划分数据集,贝叶斯最优误差,解决数据不匹配,多任务学习,端到端架构)https://blog.csdn.net/qq_36187544/article/details/92564198
下一篇:深度学习(5)--目标检测小总结(目标检测,人脸识别,目标识别与定位,YOLO算法,bounding box,边框回归)https://blog.csdn.net/qq_36187544/article/details/92795952
目录
卷积神经网络基础知识
卷积:
filter:卷积核,也叫过滤器。常用奇数的理由:有一个中心像素点,进行padding时可以对称,若为偶数进行padding需要进行非对称处理。
padding:会缩小图像,会削弱边缘特征(中间的像素点被多次重复计算,边缘没有)。若初始n*n大小图片,卷积核f*f,valid即不进行扩展,得到(n-f+1)*(n-f+1)大小结果,same即进行扩充padding使输入输出图片大小一致,扩充p圈,得到(n+2p-f+1)*(n+2p-f+1)大小图像
stride:步长s,若初始n*n大小图片,卷积核f*f,扩充p圈,得到[(n+2p-f)/s+1]*[(n+2p-f)/s+1]大小图片,若非整数,向下取整。
立体卷积同理,当多个输出对应多个卷积核,就能得到不同数量输出通道:
理解:每一个卷积核对应输出一个通道,实现权值共享,可理解为获取到一个特征。所以权重大小==前一层通道数×后一层通道数×卷积核大小(忽略bias偏差,也就是几个实数)。比如上图,6×6×3的输入图像通过2个卷积核(过滤器)得到两个通道输出,认为获取了2个特征。图像越复杂需要特征越多,结果越准确。
池化
池化可以增强鲁棒性。如下图,最大池化的过滤器为2×2,f=2,步长s=2,得到2×2的输出结果。计算方法同卷积。
最大池化的直观理解:如果得到了该特征,就进行最大池化保存好该特征,如果没有该特征,那么数值较小。
典型网络
一个典型CNN举例如下,首先只有卷积层和FC层需要参数,比如conv1,卷积核为5×5,输出通道为8,加上偏置5×5×8+8=208。激活尺寸要慢慢收缩,越来越小,大多数CNN网络都是如此。
如果得到超参数:用别人的!
优势
参数共享:如果一个卷积核适用于图片一个地方,也可能适用于其他地方。如一个垂直检测边缘的卷积核输出一个通道,得到一种垂直特征,适用于同一图片多个地方。
稀疏连接:一个输出仅依赖与部分参数,称为稀疏连接。如下图,绿色只依赖于绿色的9个参数,红色亦然。
经典网络
LeNet-5
LeNet-5(1998年)如下:
AlexNet
AlexNet采用了reLU作为激活函数,两个GPU并行计算(当时GPU水平低,还需要写方法将GPU数据进行交流采集),采用局部响应归一化层(Local Response Normalization,LRN层,就是将部分通道进行归一化,减少参数数量,现在基本已经不用):
VGG网络
VGG网络已经比较熟悉了。提两点,VGG的亮点在于网络结构非常规整,conv*n+pool式结构,另一个亮点在于参数非常规整,逐步2倍扩大,效果也很好。规律性的参数值得研究。
残差网络ResNet
利用跳远连接(近路连接)的方式构造残差块(如下图),可以有效避免梯度消失,梯度爆炸问题。
1×1卷积核
对于单通道的输入效果一般,就是单纯的乘积:
但是对于多通道,可以直观理解为运用了全连接网络,比如下图为单个过滤器得到的结果,若为n个过滤器,即实现了32×n的全连接:
实现了压缩或增加维度,压缩或增加通道数。(池化实现压缩长宽,未涉及通道)如果过滤器和输入通道数一致,则实现添加非线性函数,也可以搭建瓶颈层以减少计算(如Inception)
Inception
最近也实现了这个网络,该网络核心就是inception模块,就是对同一输入利用不同大小感受野卷积输出,然后融合拼接实现不需要人为控制各种超参数。代价是计算成本(为了节约成本,先采用1×1卷积核构建瓶颈层,再做卷积)
同时,还采用额外两条中间预测防止过拟合,确保中间过程也能进行预测。(其实网络小也并不需要)
在最近项目中确实发现Inception实现图片分类比VGG和LSTM效果好太多了。
一个巨好用的代码链接:
https://pan.baidu.com/s/1MAjNCF7e7_reJYcuZl7DKQ
提取码:3ldj
这个代码是别人开源的,不仅包括InceptionV1,V2,V3等还包括ResNet等,但是后来实在找不到github原网址了,致歉,致敬!
扩充数据
对于CV而言,数据基本都是不够的,所以迁移学习运用广泛。可参考:Tensorflow入门七-迁移学习实现VGG16微调猫狗分类(迁移学习源1000分类权重文件百度云可直接再学习,线程)https://blog.csdn.net/qq_36187544/article/details/89885247
还有其他数据增强方法来扩展数据集,比如图片镜像,随机剪裁(随机剪裁有时会失败,注意甄别),用的较少的也有旋转,扭曲等:
色彩转换,增加失真,通过这种方法增加色彩的鲁棒性,在算法可通过PCA进行色彩增强即实现颜色的平均分布(若RG多,B少,更多的减少RG,增强B,减少色彩分布的影响):