学习目标:了解卷积神经网络概念和相关操做;网络
1、全链接神经网络ide
定义:每一个神经元与先后相邻层的每个神经元都有链接,输入:特征,输出:预测的结果。函数
参数个数:w+b = ∑ (前层 × 后层 + 后层)
学习
注意:待优化的参数过多, 容易致使模型过拟合。 在实际应用中,会先对原始图像进行特征提取,把提取到的特征喂给全链接
网络,再让全链接网络计算出分类评估值。
2、卷积 Convolutional
2.1 定义优化
卷积是一种有效提取图片特征的方法。 通常用一个正方形卷积核,遍历图片上的每个像素点。图片与卷积核重合区域内相对应的每个像素值乘卷积核
内相对应点的权重,而后求和, 再加上偏置后,最后获得输出图片中的一个像素值。
spa
例如,5x5x1 的灰度图片(1 表示单通道, 5x5 表示分辨率,共有 5 行 5列个灰度值)。 若用一个 3x3x1 的卷积核对此 5x5x1 的灰度图片进行卷积, 偏置项b=1
当前位置计算一个卷积值:(-1)x1+0x0+1x2+(-1)x5+0x4+1x2+(-1)x3+0x4+1x5+1=13d
输出图片边长=(输入图片边长–卷积核长+1) /步长,此图为:(5 – 3 + 1)/ 1 = 3, 输出图片是 3x3 的分辨率, 用了 1 个卷积核, 输出深度是 1,最后输出的是3x3x1 的图片。
code
2.2 全零填充 Padding
blog
在输入图片周围进行全零填充,能够保证输出图片的尺寸和输入图片一致 。例如:在 5x5x1 的图片周围进行全零填充, 可以使输出图片仍保持 5x5x1 的
维度。 这个全零填充的过程叫作 padding。 图片
使用 padding 的输出图片边长 = 输入图片边长/步长;
标记:若是用全零填充, 也就是 padding=SAME。 若是不用全零填充, 也就是 padding=VALID。
3、函数操做
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函数:
4、池化
3.1 最大池化
卷积核在输入图片重合部分取最大值,Tensorflow最大池化用 tf.nn.max_pool 函数;这里结果就被压缩为原来的1/4。
函数描述:
3.2 平均池化
卷积核在输入图片重合部分取平均值,平均池化用 tf.nn.avg_pool 函数。
四、舍弃 Dropout
在神经网络训练过程当中,为了减小过多参数常使用 dropout 的方法,将一部分神经元按照必定几率从神经网络中舍弃。这种舍弃是临时性的,仅在训练时舍弃一些神经元;在使用神经网络时,会把全部的神经元恢复到神经网络中。好比上面这张图,在训练时一些神经元不参加神经网络计算了。Dropout 能够有效减小过拟合,加快模型的训练速度。
dropout 一 般 会 放 到 全 连 接 网 络 中 。 如 果在 训 练 参 数 的 过 程 中 , 输 出=tf.nn.dropout(上层输出,暂时舍弃神经元的几率),这样就有指定几率的神经元被随机置零,置零的神经元不参加当前轮的参数优化。
总结:
卷积神经网络能够认为由两部分组成:(1)对输入图片进行特征提取;(2)就是全链接网络。只不过喂入全链接网络的再也不是原始图片,而是通过若干次卷积、激活和池化后的特征信息。