本blog面向有TensorFlow经验的用户,并有机器学习方面的专业知识和经验。
1,Overview概述
CIFAR-10分类是机器学习中常见的标准基础问题。 问题是分类10个类别的RGB 32x32像素图像:
airplane, automobile, bird, cat, deer, dog, frog, horse, ship, and truck.
1.1,goals
本blog的目标是建立一个相对较小的卷积神经网络(CNN)来识别图像。 在这个过程中,本教程:
- 突出网络架构,训练和评估的规范模板。
- 为构建更大更复杂的模型提供了一个模板。
选择CIFAR-10的原因是它足够复杂,可以大量运用TensorFlow扩展到大型模型的能力。 同时,这个模型足够小,可以快速训练,这对于尝试新的想法和尝试新的技术是理想的。
1.2,Highlights of the Tutorial
CIFAR-10教程演示了在TensorFlow中设计更大和更复杂模型的几个重要结构:
- 核心数学组件包括卷积(维基),纠正线性激活(维基),最大池(维基百科)和本地响应正常化(AlexNet论文第3.3章)。
- 在培训期间网络活动的可视化,包括输入图像,激活和渐变的损失和分布。
- 用于计算学习参数的移动平均数的例程,并在评估期间使用这些平均数来提高预测性能。
- 实施随时间有系统地减少的学习率表。
- 预取输入数据的队列以隔离模型和磁盘延迟以及昂贵的图像预处理。
我们还提供了一个多GPU版本的模型,它演示了:
- 配置一个模型来并行训练多个GPU cards。
- 在多个GPU之间共享和更新变量。
我们希望本教程为在TensorFlow上进行视觉任务构建更大的CNN提供了一个启动点。
1.3,Model Architecture
CIFAR-10教程中的模型是一个由交替卷积和非线性组成的多层体系结构。 这些层之后是完全连接的层,通向softmax分类器。 该模型遵循Alex Krizhevsky所描述的架构,在前几个层次中有一些差异。
这个模型在GPU的几个小时训练时间内达到了高达86%的精度。 请参阅下面的代码和细节。 它由1,068,298个可学习的参数组成,并且需要大约19.5M的乘加操作来计算单个图像上的inference 。
2,Code Organization
本教程的代码位于models / tutorials / image / cifar10 /中。
3,CIFAR-10 Model
CIFAR-10网络主要包含在cifar10.py中。 完整的训练图包含大约765个操作。 我们发现,通过构建带有以下模块的图,我们可以使代码最为可重用:
- Model inputs:输入()和distorted_inputs()添加操作,分别读取和预处理CIFAR图像以进行评估和训练。
- Model prediction:推理()增加了对提供的图像进行处理(即分类)的操作。
- Model training:loss()和train