卷积神经网络构成:
(1)卷积层
1、功能:提取特征
2、输入输出:输入的是图片、输出是特征图
卷积核放在神经网络里,就代表对应的权重(weight),,就相当于函数参数。卷积核和图像进行点乘, 就代表卷积核里的权重单独对相应位置的像素进行作用。虽说我们称为卷积,实际上是位置一一对应的点乘,不是真正意义的卷积。比如图像位置(1,1)乘以卷积核位置(1,1),然后将各自点乘结果相加。这里仅仅描述了一次卷积过程。
之所以这里输出是3×3,是因为我们没有对输入图像进行外边界进行填充。
我们使用一个卷积通过滑动对整个输入图像每个像素点进行操作。
我们知道通常图像都是有R G B 三个通道也就是三个维度*组成的,每个维度都有自己的像素图,因此我们的卷积核也需要三个维度与之对应相运算。然后把三个维度相对应位置的计算结果相加,比如把R G B 三个维度(1,1)位置各自的卷积结果相加,构成一个新的特征图。这只是一个卷积核心操作的结果,我们由原本一个图像三个维度变化为仅有一个维度一个特征图。有一个卷积核的三个维度参与
假设我们现在有n个卷积核,每个卷积核都有三个维度。根据上面我们知道***一个卷积核**可以获取一个特征图***,不过由一个卷积核获取的特征图是一维的,那么我们现在n个卷积核操作就可以获取N个一维的特征图这样把n个一维的特征图堆叠起来就成了一个n维度的特征图。假设图像格式为[32,32,3],三个维度,大小宽高都是32,卷积核是16个[5,5,3]宽高都是5×5,维度是3,这个维度必须和图像维度对应,原因如上,卷积结果就是[32,32,16],特征图和输入图大小一样,但是维度发生变化,变为了卷积核个数。
下图解释了上面所讲解的。
输入图像大小是 8 × 8<表示宽高>,维度为3 < R G B>,因为卷积核个数可以随意所以我们采用了五个,但是卷积核维度必须和图像一致,所以只能为3,卷积核大小也可以随意我们采取了3×3大小。五个卷积生成五个维度都为1的特征图,堆叠到一起就成了一个五个维度的特征图。 这个卷积层的输出就是一个五维的特征图。
(2)池化层
1、功能:采样,改变尺寸
2、输入输出:输入是Feature Map特征图《利用卷积层获取》,也就是卷积层的输出。
3、分类
最大池化:原本四个数据转化为一个,特征图尺寸缩减。
平均池化:也是四个数据变为一个数据。
4、注意这一层是不需要参数的,他只是对输入的特征图数据做处理。
说到底还是一个特征选择,信息过滤的过程。也就是说我们损失了一部分信息,这是一个和计算性能的一个妥协,随着运算速度的不断提高《尺寸变小了》,我认为这个妥协会越来越小。
这一层对于CNN可有可无。
(3)全连接层
1、功能:提取特征
2、输入输出:输入的是池化层处理的数据结果。输出就是我们想要的结果了。
输出举个例子 :
我们现在识别物体A属于苹果,香蕉,橘子三类中的那一个。全链接层他的输出并不是直接输出一个结果告诉我们A是香蕉或者A是苹果这种结果。他输出是一个三维(因为我们是三分类,分类n个数据就是n维的数组)的向量[p1,p2,p3]。 p1,p2,p3分别代表物体A被识别为苹果,香蕉,橘子的概率。谁的概率也就是数最大,那么这个物体是谁的可能性就最大,我们就认为他是那个物体。
示意图:
前半部分的convolution(卷积)和maxpooling layers(池化)我们上面已经讨论过了。
后半部分Fully Connected Layer的输出正如我们上面举的水果识别例子一样,输出的是一个概率数值。
但是我们也发现他的输出面显是一个向量、***但是它的输入(也就是池化层的输出)***是一个特征图,参考下图:
我们看到池化层结果是20 * 12* 12的特征图***他也是全连接的输入***、但是全连接的输出是一个1 × 100的向量,这里我们可以理解为***在中间做了一次卷积***。我们用一个12x12x20的filter 去卷积激活函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,这个输出就是一个值。因为我们有***100个神经元***去做一百次卷积,所以就输出一个1×100的向量。我们实际就是用一个***12x12x20x100***的卷积层去做卷积,得到激活函数的输出,生成一个1×100的向量,来表示各个类别的概率。
(4)**CNN举例子:
卷积神经网络并非只是上面提到的三层结构,而是多层结构,我们对于这个CNN网络结构的设计(卷积层和池化层的个数,位置)过程就是模型的创建。不同模型,结构和参数都不同。结构是我们事先确定好的,而参数的确定就是训练的过程。