Tensorflow——图像识别与卷积神经网络
一 卷积神经网络简介
- 全连接神经网络:神经网络每两层之间的所有节点都是有边相连的
-
卷积神经网络:相邻两层之间只有部分节点相连
卷积神经网络的输入层就是图像的原始像素,而输出层中的每一个节点代表了不同类别的可信度。
使用全连接神经网络处理图像的最大问题在于全连接层的参数太多,参数增多除了导致计算速度减慢,还很容易导致过拟合问题。
一个卷积神经网络主要由5种结构组成:
- 输入层
- 卷积层
- 池化层
- 全连接层
- Softmax层
二 卷积神经网络常用结构
主要介绍卷积层和池化层的网络结构以及前向传播过程。
1. 卷积层
过滤器可以将当前神经网络上的一个子节点矩阵转化为下一层神经网络上的一个单位节点矩阵。(单位节点矩阵指的是一个长和宽都为1,但深度不限的节点矩阵)
过滤器的尺寸一般都是由人工指定的,常用的过滤器尺寸有3x3或5x5,过滤器的尺寸指的是过滤器输入节点矩阵的大小,过滤器处理的矩阵深度和当前神经网络节点矩阵的深度是一致的,所以虽然节点矩阵是三维的,但过滤器的尺寸只需要指定两个维度。
过滤器的深度只的是输出单位节点矩阵的深度,也需要人工进行指定。
过滤器的前向传播过程就是通过左侧小矩阵中的节点计算出右侧单位矩阵中节点的过程
$$ g(i)=f\left(\sum_{x=1}^{2} \sum_{y=1}^{2} \sum_{z=1}^{3} a_{x, y, z} \times w_{x, y, z}^{i}+b^{i}\right) $$
其中\(a_{x, y, z}\)为过滤器中点(x, y, z)的取值,\(f\)为**函数,下图展示了在给定\(a\), \(w^{0}\)和\(b^{0}\)的情况下,使Relu作为**函数时\(g(0)\)的计算过程
$$
\begin{aligned} g(0)=& f\{[1 \times 2+2 \times 0+0 \times 1+(-1) \times(-1)]+\\ &[2 \times(-2)+1 \times 2+(-1) \times 0+(-2) \times 1]+\\ &[1 \times 0+0 \times 1+2 \times(-1)+1 \times(-1)]+1\} \\=& f\{3+(-4)+(-3)+1\} \\=& f\{-3\}=0 \end{aligned}
$$
卷积层结构的前向传播过程就是通过将一个过滤器从神经网络当前层的左上角移动到右下角,并且在移动过程中计算每一个对应的单位矩阵。
当过滤器的大小不为1x1时,卷积层前向传播得到的矩阵的尺寸要小于当前层矩阵的尺寸。
在卷积神经网络中,每一个卷积层中使用的过滤器中的参数都是一样的。
- 共享过滤器的参数可以使得图像上的内容不受位置的影响
- 可以巨幅减少神经网络上的参数
2. 池化层