面向机器智能的TensorFlow实战5:目标识别与分类

  本节用于训练CNN模型的数据集为Stanford的Dogs Dataset是ImageNet的一个子集

  卷积层(tf.nn.conv2d)、非线性变换层(tf.nn.relu)、池化层(tf.nn.max_pool)及全连接层(tf.nn.matmul)


   TensorFlow的输入流水线拥有一种为使用一个批数据中的多幅图像而设计的专门格式。

2、卷积

    卷积核(kernel)也称为权值、滤波器、卷积矩阵或模板。跨度(strides)

conv2d = tf.nn.conv2d(input_batch, kernel, strides=[1,3,3,1], padding="SAME")
strides参数的格式与输入向量相同,集(image_batch_size_stride, image_height_stride, image_width_stride, image_channels_stride)。

     边界填充

     数据格式


3、常见层

    单层CNN的一种实际用途是检测边缘。对于图像识别和分类任务而言,更常见的情形是使用不同的层类型支持某个卷积层。这些层有助于减少过拟合,并可加速训练过程和降低内存占用率。

    卷积层:tf.nn.depthwise_conv2d、tf.nn.separable_conv2d、tf.nn.conv2d_transpose

    激活函数:在CNN中主要使用tf.nn.relu,是因为它虽然会带来一些信息损失,但性能较为突出。开始设计模型时,推荐使用tf.nn.relu,但高级用户也可创建自己的激活函数。评价某个激活函数是否有用时,可考虑下列为数不多的几个主要因素:

1)该函数应是单调的,这样输出便会随着输入的增长而增长,从而使利用梯度下降法寻找局部极值点成为可能。

2)该函数应是可微分的,以保证该函数定义域内的任意一点上导数都存在,从而使利用梯度下降法能够正常使用来自这类激活函数的输出。

    tf.nn.relu:优点在于不受“梯度消失”的影响,且取值范围为[0, +00],其缺点在于当使用较大的学习速率是,易受达到饱和的神经元的影响。

    tf.sigmoid:位于区间[0,1]。当输入接近饱和或变化剧烈时,对输出范围的这种缩减往往会带来一些不利影响。

    tf.tanh:主要区别在于值域为[-1.0, 1.0]。在某些特定的网络架构中,能够输出负值的能力可能会非常有用。

    tf.nn.dropout:依据某个可配置的概率将输出设为0.0。当引入少量随机性有助于训练时,这个层会有很好的表现。一种适合的场景是:当要学习的一些模式与其近邻特征耦合过强时。这种层会为所学习到的输出添加少量噪声。注:这种层应当只在训练阶段使用。如果在测试阶段使用该层,它所引入的随机噪声将对结果产生误导。

    池化层:能够减少过拟合,并通过减少输入的尺寸来提高性能。它们可用于对输入降采样,但会为后续层保留重要的信息。只使用tf.nn.conv2d来减少输入的尺寸也是可以的,但池化层的效率更高。

     tf.nn.max_pool、tf.nn.avg_pool

     归一化:由于ReLU是无界函数,利用某些形式的归一化来识别那些高频特征通常是十分有用的。

     高级层

4、图像与TensorFlow

     加载图像:Stanford Dogs数据集

     JPEG与PNG:tf.image.decode_jpeg,另一种是tf.image.decode_png

    TFRecord:为将二进制数据和标签(训练的类别标签)数据存储在同一个文件中,内置文件格式为TFRecord,它要求在模型训练之前通过一个预处理步骤将图像转换为TFRecord格式。该格式的最大优点是将每副输入图像和与之关联的标签放在同一文件中。

     图像操作:裁剪、边界填充、翻转、饱和与平衡。

     颜色:灰度、HSV空间、RGB空间、LAB空间、图像数据类型转换

5、CNN的实现

     训练数据来自Stanford的一个包含了许多狗及其品种标签的数据集

     http://vision.stanford.edu/aditya86/ImageNetDogs/,下载解压为imagenet-dogs目录

     网络采取了Alex Krizhevsky的AlexNet的简化版本,但并未使用AlexNet的所有层。


    将图像转为TFRecord文件:因为图像尺寸不一,且相应的品种标签也不在图像文件中。转换为TFRecord文件将有助于加速训练,并简化与图像标签的匹配。另一个好处是与训练和测试有关的图像可以事先分离,这样当训练开始时,就可利用检查点文件对模型进行不间断的测试。打开每幅图像,将其转换为灰度图,调整其尺寸,然后将其添加到一个TFRecord文件中。

    加载图像:每次加载少量图像及相应的标签,批处理时,必须要满足的条件是系统有足够的内存

     模型:类似LeNet-5,两个卷积层和池化层

     训练

     利用TensorBoard调试滤波器


猜你喜欢

转载自blog.csdn.net/qfire/article/details/80456099