卷积是一种形式上的数学运算,同时也是一种特殊的线性运算卷积替代矩阵乘法运算的神经网络。使用卷积运算的动机:卷积是对两个实变函数的数学运算,卷积的第一个参数叫做输入,第二个参数通常是核函数,输出有时是特征映射(feature map)。卷积运算的输入通常是多维数组,核函数是由学习算法优化得到的多维数组的参数。传统的神经网络是通过矩阵建立输入与输出之间的关系。

  当处理一张图片时,输入的图像可能包含成千上万个像素点,但是可以通过只占用几十到上百个像素点的核来检测一些小的有意义的特征,例如图像的边缘。池化函数使用某一位置的相邻输出的总体统计特征来替代网络在该位置的输出,最大池化引入了平移不变性。

   训练网络,需要对核中的权重进行求导。用卷积网络做图像分割的主要思想是假设大片相连的像素倾向于对应着相同的标签。一般的图模型可以描述相邻像素间的概率关系。

卷积神经网络CNN的结构一般包含这几个层:

  • 输入层:用于数据的输入
  • 卷积层:使用卷积核进行特征提取和特征映射
  • 激励层:由于卷积也是一种线性运算,因此需要增加非线性映射
  • 池化层:进行下采样,对特征图稀疏处理,减少数据运算量。
  • 全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失
  • 输出层:用于输出结果

  当然中间还可以使用一些其他的功能层:

  • 归一化层(Batch Normalization):在CNN中对特征的归一化
  • 切分层:对某些(图片)数据的进行分区域的单独学习
  • 融合层:对独立进行特征学习的分支进行融合

    权重w是一个矩阵,该矩阵称为卷积核。转自

    padding填充有两种方式,其中same填充是保持通道数不变,是对原始输入尺寸的填充,比如一张图片输入为7*7,需要对它进行填充到9*9.reshape的作用是将一位数组分为n*n矩阵,依然有两种形式(直接n*n,或者-1,n。这里-1代表不知道分为几行,但是知道分为n列)。如果一张图片用一行数表示,reshape函数的作用就是取这一行数。

  VGG16模型一共五个卷积层,第一、二、三、四、五分别使用64、128、256、512和512个过滤器。每卷积一次,由于使用same填充,所以卷积之后得到的特征大小和输入的图像大小一样,每次的变化在最后一个参数,也就是过滤器的个数。每次池化,因为采用的是2*2的,所以前面参数减半,第三个参数不变。softmax输出的类别是自己要分的种类。

   定义一个数学模型,将输入图像转化为输出标签,模型的输出依赖于内建的参数,参数不是人为的设置,而是通过计算机学习得到。还需要向模型输入图像的数据集和正确的标签,训练数据,不停的调整参数,目标是找到合适的参数使得模型输出尽可能多的正确结果。在训练结束之前,看不到图像的结果,直到训练的参数不再发生变化,这时候将测试集作为输入,输入到模型中从而检测模型的性能。在测试的时候,会有文本,这些文本是把标签转换为0,1数字,比如0代表某一类,1代表另一类这种形式。TensorFlow可以直接完成参数的计算,TensorFlow通过占位符描述输入数据的格式。