二、卷积神经网络概念

学习目标:了解卷积神经网络概念和相关操作;

一、全连接神经网络

定义:每个神经元与前后相邻层的每一个神经元都有连接,输入:特征,输出:预测的结果。

参数个数:w+b = ∑ (前层 × 后层 + 后层)

注意:待优化的参数过多, 容易导致模型过拟合。 在实际应用中,会先对原始图像进行特征提取,把提取到的特征喂给全连接
网络,再让全连接网络计算出分类评估值。

二、卷积 Convolutional
2.1 定义

卷积是一种有效提取图片特征的方法。 一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值乘卷积核
内相对应点的权重,然后求和, 再加上偏置后,最后得到输出图片中的一个像素值。


 例如,5x5x1 的灰度图片(1 表示单通道, 5x5 表示分辨率,共有 5 5列个灰度值)。 若用一个 3x3x1 的卷积核对此 5x5x1 的灰度图片进行卷积, 偏置项b=1
当前位置计算一个卷积值:(-1)x1+0x0+1x2+(-1)x5+0x4+1x2+(-1)x3+0x4+1x5+1=1

输出图片边长=(输入图片边长卷积核长+1/步长,此图为:(5 – 3 + 1)/ 1 = 3, 输出图片是 3x3 的分辨率, 用了 1 个卷积核, 输出深度是 1,最后输出的是3x3x1 的图片。

2.2 全零填充 Padding

在输入图片周围进行全零填充,可以保证输出图片的尺寸和输入图片一致 。例如:5x5x1 的图片周围进行全零填充, 可使输出图片仍保持 5x5x1
维度。 这个全零填充的过程叫做
padding

使用 padding 的输出图片边长 = 输入图片边长/步长; 

标记:如果用全零填充, 也就是 padding=SAME。 如果不用全零填充, 也就是 padding=VALID
三、函数操作

tf.nn.conv2d是TensorFlow里面实现卷积的函数,实际上这是搭建卷积神经网络比较核心的一个方法.

函数原型:

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

函数说明:

    

其中,

(1)batch 表示一次喂入多少张图片;分辨率:5行5列;灰度图为单通道,参数写 1,RGB 三个颜色组成的彩色图为3通道,参写3;

(2)注意: 卷积核的通道数是由输入图片的通道数决定的,卷积核的通道数等于输入图片的通道数,所以卷积核的通道数也是 1。一共有 16 个这样的卷积核,说明卷积操作后输出图片的深度是 16,也就是输出为16 通道,输出16张3*3的feature map。

(3)核滑动步长:第一个 1 和最后一个 1 这里是固定的,这句表示横向纵向都以 1 为步长。最后一个参数表示是否使用 padding。

RGB 三个颜色组成的彩色图:

卷积核的深度应该等于输入图片的通道数,所以使用 3x3x3的卷积核,最后一个 3 表示匹配输入图像的 3 个通道。

卷积计算方法:和单层卷积核相似,卷积核为了匹配红绿蓝三个颜色,把三层的卷积核套在三层的彩色图片上,重合的 27 个像素进行对应点的乘加运算,最后的结果再加上偏置项 b,求得输出图片中的一个值。

tf.nn.conv2d函数:

四、池化

3.1 最大池化

  卷积核在输入图片重合部分取最大值,Tensorflow最大池化用 tf.nn.max_pool 函数;这里结果就被压缩为原来的1/4。

函数描述:

3.2 平均池化

  卷积核在输入图片重合部分取平均值,平均池化用 tf.nn.avg_pool 函数。 

舍弃 Dropout

        在神经网络训练过程中,为了减少过多参数常使用 dropout 的方法,将一部分神经元按照一定概率从神经网络中舍弃。这种舍弃是临时性的,仅在训练时舍弃一些神经元;在使用神经网络时,会把所有的神经元恢复到神经网络中。比如上面这张图,在训练时一些神经元不参加神经网络计算了。Dropout 可以有效减少过拟合,加快模型的训练速度。

dropout 一 般 会 放 到 全 连 接 网 络 中 。 如 果在 训 练 参 数 的 过 程 中 , 输 出=tf.nn.dropout(上层输出,暂时舍弃神经元的概率),这样就有指定概率的神经元被随机置零,置零的神经元不参加当前轮的参数优化。

总结:

卷积神经网络可以认为由两部分组成:(1)对输入图片进行特征提取;(2)就是全连接网络。只不过喂入全连接网络的不再是原始图片,而是经过若干次卷积、激活和池化后的特征信息。

 

posted @ 2019-02-24 19:39  程序猿爱吃鸡  阅读(446)  评论(0编辑  收藏  举报