科研成长时Computer Science

卷积神经网络原理

2020-06-19  本文已影响0人  __method__

卷积神经网络三个结构

神经网络(neural networks)的基本组成包括输入层、隐藏层、输出层。而卷积神经网络的特点在于隐藏层分为卷积层和池化层(pooling layer,又叫下采样层)以及激活层。每一层的作用

为了能够达到分类效果,还会有一个全连接层(FC)也就是最后的输出层,进行损失计算分类。

卷积层

卷积层(Convolutional layer),卷积神经网络中每层卷积层由若干卷积单元(卷积核)组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的。
卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。

卷积核(Filter)的四大要素

卷积如何计算-大小

卷积核我们可以理解为一个观察的人,带着若干权重和一个偏置去观察,进行特征加权运算。


注:上述要加上偏置

卷积核大小 ---> 11、33、5*5
通常卷积核大小选择这些大小,是经过研究人员证明比较好的效果。这个人观察之后会得到一个运算结果,

那么这个人想观察所有这张图的像素怎么办?那就需要这样


卷积如何计算-步长

需要去移动卷积核观察这张图片,需要的参数就是步长。
假设移动的步长为一个像素,那么最终这个人观察的结果以下图为例:
5x5的图片,3x3的卷积大小去一个步长运算得到3x3的大小观察结果



如果移动的步长为2那么结果是这样

卷积如何计算-卷积核个数

那么如果在某一层结构当中,不止是一个人观察,多个人(卷积核)一起去观察。那就得到多张观察结果。

我们已经得出输出结果的大小有大小和步长决定的,但是只有这些吗,还有一个就是零填充。Filter观察窗口的大小和移动步长会导致超过图片像素宽度!

卷积如何计算-零填充大小

零填充就是在图片像素外围填充一圈值为0的像素。


有两种方式,SAME和VALID

在Tensorflow当中,卷积API设置”SAME”之后,输出高宽与输入大小一样(重要)

总结-输出大小计算公式

最终零填充到底填充多少呢?我们并不需要去关注,接下来我们利用已知的这些条件来去求出输出的大小来看结果

通过一个例子来理解下面的公式

计算案例:
1、假设已知的条件:输入图像32321, 50个Filter,大小为55,移动步长为1,零填充大小为1。请求出输出大小?
H2 = (H1 - F + 2P)/S + 1 = (32 - 5 + 2 * 1)/1 + 1 = 30
W2 = (H1 - F + 2P)/S + 1 = (32 -5 + 2 * 1)/1 + 1 = 30
D2 = K = 50
所以输出大小为[30, 30, 50]
2、假设已知的条件:输入图像32
321, 50个Filter,大小为33,移动步长为1,未知零填充。输出大小3232?
H2 = (H1 - F + 2P)/S + 1 = (32 - 3 + 2 * P)/1 + 1 = 32
W2 = (H1 - F + 2P)/S + 1 = (32 -3 + 2 * P)/1 + 1 = 32
所以零填充大小为:1
1

多通道图片如何观察

如果是一张彩色图片,那么就有三种表分别为R,G,B。原本每个人需要带一个3x3或者其他大小的卷积核,现在需要带3张3x3的权重和一个偏置,总共就27个权重。最终每个人还是得出一张结果

卷积网络API

tf.nn.conv2d(input, filter, strides=, padding=, name=None)

小结

1、已知固定输出大小,反过来求出零填充,已知零填充,根据步长等信息,求出输出大小
2、卷积层过滤器(卷积核)大小,三个选择1x1,3x3,5x5,步长一般都为1,过滤器个数不定,不同结构选择不同,
3、每个过滤器会带有若干权重和1个偏置

激活函数

卷积网络结构采用激活函数,自从网路得到发展之后。大家发现原有的sigmoid这些激活函数并不能达到好的效果,所以采取新的激活函数。

Relu



效果是什么样的呢?


playground演示不同激活函数作用

网址:http://playground.tensorflow.org/

为什么采取的新的激活函数

Relu优点

sigmoid缺点

激活函数API

tf.nn.relu(features, name=None)

池化层(Polling)

Pooling层主要的作用是特征提取,通过去掉Feature Map中不重要的样本,进一步减少参数数量。Pooling的方法很多,通常采用最大池化

池化层计算

池化层也有窗口的大小以及移动步长,那么之后的输出大小怎么计算?计算公式同卷积计算公式一样

计算:224x224x64,窗口为2,步长为2输出结果?
H2 = (224 - 2 + 20)/2 +1 = 112
w2 = (224 - 2 + 2
0)/2 +1 = 112

通常池化层采用 2x2大小、步长为2窗口

池化层API

tf.nn.max_pool(value, ksize=, strides=, padding=,name=None)

Full Connection层

前面的卷积和池化相当于做特征工程,最后的全连接层在整个卷积神经网络中起到“分类器”的作用。

卷积神经网络总结

面试题

上一篇下一篇

猜你喜欢

热点阅读