CNN01:CNN卷积神经网络概述

1. 概述

卷积神经网络,即 CNN (Convolutional Neural Networks)。它不同于传统的神经网络 (下一层的节点与上一层的节点都是有连接的,即是全连接的) 。
常见的CNN结构:LeNet-5、AlexNet、VGGNet等;
其主要应用与图像处理问题中;
与传统神经网络类似,也是层级的网络结构,但是其不同层次中运算形式不同。

2. 网络层次结构

  • 输入层 Input Layer
  • 卷积计算层 CONV Layer
  • ReLU激活层 ReLU Incentive Layer
    不同于传统的神经网络,这里激活函数是单独的一层
  • 池化层 Pooling Layer
    该层主要是压缩,即降低模型的复杂度
  • 全连接层 FC Layer
  • 归一化层 Batch Normalization Layer
  • 输出层 Output Layer

前5个层次是必不可少的,归一化层并不是都有。

3. 相关概念

  1. 卷积

卷积其实也是一种计算,对于下面这张图,最左边的是原始的一个图片(需要明确的是,不同于人脑,计算机对于图片的识别是一堆的像素值,即矩阵),中间的那个矩阵是 卷积核(也称过滤器,卷积核的大小可以人为设定的)
在这里插入图片描述
上边是怎么通过原始的那个3X3的矩阵得到最右边的那个-8的呢?
就是通过两个矩阵对应位置相乘再相加:
在这里插入图片描述
通过不断的移动窗口与卷积核进行运算,最终得到一个新的像素矩阵,这个过程就是卷积的过程。

import numpy as np

a = np.array([[0, 0, 0], [0, 1, 1], [0, 1, 2]])
b = np.array([[4, 0, 0], [0, 0, 0], [0, 0, -4]])
result = np.sum(a*b)  # 对应相乘再相加
print(result)
# 输出:-8
  1. 窗口滑动、步长

假如原始的图片是一个55的像素矩阵,然后设定的卷积核是33的矩阵,接着需要像上边计算出-8一样通过卷积核进行计算,就需要对原始的像素矩阵进行一个从左至右从上至下的扫描,这里的窗口是3*3(要与卷积核shape一致)的,这个窗口的移动就是窗口滑动,如下图。

在这里插入图片描述
在上图中,窗口是33的,步长是2,窗口滑动就是在55的像素矩阵中,用这个窗口来扫描这个原始的像素矩阵,每次与卷积核进行运算,最终得到2*2的矩阵,这像把原始像素矩阵中9个像素提取成了1个像素。

  1. 填充值

填充值是什么呢?对于这个概念,也以上面55的原始像素矩阵为例,卷积核设置为22的矩阵,步长设置为2,那么经过窗口滑动会出现如下图的情形:
在这里插入图片描述
此时如果不填充数据的话,最后一列和最后一行的像素信息就会丢失,所以通过填充值(一般填充0)进行填充,填充如下图(粉色圆圈为填充值),填充之后再通过窗口滑动就可以完全获取像素信息了:

在这里插入图片描述

  1. 深度

深度主要表示从哪个方面(颜色、形状)关注原始图片的信息。

猜你喜欢

转载自blog.csdn.net/weixin_41857483/article/details/111303042