(深度学习)卷积神经网络(CNN)
一、卷积神经网络和传统多层神经网络区别
1.传统多层神经网络区别:没有理论指出多少层(层数没有作用)
2.卷积网络:更加有效的特征学习部分,加深网络得以有效
3.深度学习:卷积神经网络、循环神经网络,新的结构以及一些新的方法(比如新的激活函数Relu等)
卷积神经网络主要应用于图像识别,还可以图像目标检测,常用模型如下:
Yolo:GoogleNet+ bounding boxes
SSD:VGG + region proposals
二、卷积神经网络的原理

卷积网络的主要组成部分:
神经网络由输入单元、中间处理单元和输出单元构成。而卷积神经网络的主要体现在其隐藏单元具体设计上——它们包括卷积单元和池化单元(pooling unit, 亦称下采样单元)以及激活单元。具体承担不同的功能
卷积层:基于原始图像上的滑动操作来识别特征;激活层:赋予了模型更强的非线性处理能力;池化层:利用稀疏化的特征减少计算量并简化网络结构(最大池化和平均池化)
如果是分类任务,则需在模型末尾添加全连接层(FC)作为输出层用于损失计算与分类判断;而对于非分类任务,则无需添加此结构。
三、卷积层:
其核心优势在于对特征提取能力的显著增强。
在CNN架构中,默认设置下每一卷积层通常包含多个可学习的滤波器单元(即卷积核),通过这些滤波器对输入数据进行特征提取。
每个滤波器通常呈现为方形或矩形窗口形式。

卷积神经网络中的滤镜由四个关键要素构成:
(1)滤镜数量:决定了网络能够学习的不同特征类型
(2)滤镜尺寸(观察窗口尺寸):通常采用K\times K的结构(其中K=1,3,5),这些尺寸经过研究表明能够取得较好的效果
(3)滤镜步长(滑动步长):设置为单像素移动以确保完整遍历图像特征;若步长过大可能导致特征遗漏
(4)零填充大小:指在图像外围增加一定数量的0值像素层

1)为什么进行零填充?
(1)因为设定的卷积核根据步长移动可能会损失图片的像素信息(可能没观察到),所以外围添加一圈值为0的像素使得大于图像,这样就避免了像素信息的损失。(2)采用0的原因是卷积核需要加权运算结果都是0(0_任何数=0),这样不会影响像素的运算结果
2)有两种方式,SAME和VALID
SAME:越过边缘取样,取样的面积和输入图像的像素宽度一致。
VALID:不越过边缘取样,取样的面积小于输入人的图像的像素宽度。
在Tensorflow当中,卷积API设置”SAME”之后,输出高宽与输入大小一样(重要)
2.卷积核的特点:通过细致地扫描整个图像区域来实现对图像内容的整体感知。其工作原理是通过细致地扫描整个图像区域来实现对图像内容的整体感知。

通过观察下图可知:每个作为观察者的卷积核都会输出一定尺寸的结果;这些共同构成一个完整的层结构;假设一个n×n的矩阵形式结果由若干这样的滤波器组产生;同时所有滤波器在参数设置上保持一致性——如均采用3×3矩阵;此外所有滤波器具有相同的移动步长——如均为2像素间隔;但它们所具有的权重参数以及偏置值则各具不同


3、计算输出大小

通过图示可知零填充尺寸:
1)确定预设的零填充尺寸;
2)基于卷积运算公式推导出P值时,
结合图示中的第二种模式进行计算;
5.针对三通道图像(如 RGB 图像),在进行观察分析时通常需要 3 张权重矩阵以获取综合结果。

5.卷积网络API
tf.nn.conv2d(input, filter, strides=, padding=, name=None)
计算给定4-D input和filter张量的2维卷积
input:给定的输入张量,具有[batch,heigth,width,channel],类型为float32,64
filter:指定过滤器的权重数量,[filter_height, filter_width, in_channels, out_channels]
strides:strides = [1, stride, stride, 1],步长
padding(零填充,不需要我们计算):“SAME”, “VALID”,使用的填充算法的类型,使用“SAME”。其中”VALID”表示滑动超出部分舍弃,“SAME”表示填充,使得变化后height,width一样大
javascript
四、激活函数:增加非线性的分割能力
1.ReLU函数公式

2.为什么采用ReLU的函数
有效解决梯度爆炸的问题,计算速度非常快(之所以计算快,因为relu函数公式的原因)
而之前的sigmoid函数的缺点:计算量相对大(公式/(1/(1+e^-z))复杂),sigmoid函数反向传播时,很容易就会出现梯度爆炸现象
3.激活函数API
tf.nn.relu(features, name=None)
features:卷积后加上偏置的结果
return:结果
五、池化层(Polling):特征选择的作用,减少像素特征的数量,减少运算量
Pooling层主要的作用是特征提取,通过去掉Feature Map中不重要的样本,进一步减少参数数量。解决过拟合的问题。Pooling的方法很多,通常采用最大池化
max_polling:取池化窗口的最大值
avg_polling:取池化窗口的平均值
最大池化如下图

1.池化层计算公式和卷积层一样(池化层一般采用2*2大小窗口,步长为2)

2.池化层API
tf.nn.max_pool(value, ksize=, strides=, padding=,name=None)
输入上执行最大池数
value:4-D Tensor形状[batch, height, width, channels]
channel:并不是原始图片的通道数,而是多少filter观察 例如50个人观察,则channels=50
ksize:池化窗口大小,[1, ksize, ksize, 1]
strides:步长大小,[1,strides,strides,1]
padding:“SAME”, “VALID”,使用的填充算法的类型,默认使用“SAME”
javascript
在处理分类问题时,在卷积神经网络中使用全连接层之前进行的操作类似于构建基础特征。其主要功能类似于执行分类决策。
7.卷积神经网络的过程:

